Tenemos
esta tabla Excel :
Y
queremos obtener la siguiente tabla simple.
Ojo.
Con un gráfico de tabla pivotante, con dimensiones Género y Localidad y
pivotando esta última y por expresión hacer un SUM(Población), no podríamos
obtener la columna “Media”. Sólo lo podemos hacer con una tabla simple. Pero
antes tenemos que conseguir poner cada localidad en una columna para poderlas
operar entre si. De esta forma la
“Media” siempre se calculará en función de las localidades seleccionadas por el
usuario.
Tenemos
que conseguir crear en memoria esta tabla:
El “asistente
de archivo” de QlikView no tiene la opción de hacerlo, aunque si puede hacer lo
contrario, o sea, a través de la opción
de “Tabla cruzada” podemos ir del punto 2 al punto 1.
Tampoco
con la opción “trasponer” podemos hacerlo ya que no nos permite elegir qué
campos trasponer y cuáles no.
Una
forma de hacerlo es con el siguiente script:
// Cargamos los datos del excel
EXCEL_ORIGINAL:
LOAD Género AS Genero_orig,
Población AS Poblacion_orig,
Localidad AS Localidad_orig
FROM
[C:\Users\jmmayoral\Documents\Qlikview\dummy.xlsx]
(ooxml, embedded labels, table is Hoja1);
// A partir de esa carga, creamos la que será la definitiva, pero sin el
campo que vamos a trasponer
// ni el campo de los valores.
// en nuestro caso queda fuera "Localidad" y "poblacion"
TABLA_FINAL:
LOAD Genero_orig AS Género
RESIDENT EXCEL_ORIGINAL;
// Creamos ahora una tabla con todos los valores distintos del campo a
trasponer
//
LOCALIDADES:
Load Distinct Localidad_orig as Localidad
RESIDENT EXCEL_ORIGINAL;
//Con un bucle recorremos cada valor de la tabla
FOR i=1 to NoOfRows('LOCALIDADES')
LET vLocalidad=Peek('Localidad',-$(i),'LOCALIDADES'); //aquí toma el nombre de
la division.
LEFT JOIN (TABLA_FINAL)
LOAD Genero_orig as Género, //Lista con todos los
campos excepto el traspuesto y el del valor
Poblacion_orig as [$(vLocalidad)] //Creamos una columna nueva
llamada como la Localidad que estamos procesando
RESIDENT EXCEL_ORIGINAL
WHERE Localidad_orig = '$(vLocalidad)';
NEXT i
Drop table EXCEL_ORIGINAL,
LOCALIDADES;
No hay comentarios:
Publicar un comentario