Existen
dos funciones en Qlik Sense que estuvieron documentadas en
las primeras versiones y, aunque siguen funcionando (verificado hasta la
versión de Noviembre de 2018), han desaparecido de la documentación sin dejar
rastro.
Son GetObjectDimension(índice)
y GetObjectExpresion(índice)
GetObjectDimension(0)
Devuelve la etiqueta de la dimensión actualmente seleccionada en un grupo de
dimensiones alternativas.
GetObjectExpresion(0)
Devuelve la etiqueta de la expresión actualmente seleccionada en un grupo de expresiones
alternativas.
Ojo,
lo que devuelve es la etiqueta y quizá este sea el motivo de que hayan
desaparecido de la documentación. Aunque siguen funcionando, es posible que discontinúen
su funcionamiento. Quizá de problemas cuando la etiqueta de la expresión/dimensión
es una variable.
Veamos
un ejemplo.
Vamos
a suponer que queremos un gráfico que acumule las ventas durante un periodo de
tiempo. En Sense no existe el Tic de QlikView para acumular, por tanto lo
tenemos que hacer con una fórmula.
Para
agravar la situación, el gráfico tiene 3 dimensiones alternativas. Mes, Semana y Día. Para permitir mostrar la información,
necesitamos 3 expresiones distintas, una que acumule por Mes, otra por Semana y
otra por Día y que cada una se ejecute dependiendo de la dimensión seleccionada.
El
resultado debería ser este:
La
configuración de datos y expresiones queda como en la siguiente imagen.
Observad que hay 3 dimensiones alternativas y sólo una medida.
La
expresión de la medida es esta:
ALT(
IF(GetObjectDimension(0)='Mes Venta',
SUM(aggr(rangesum(above(SUM({<[Year]={'$(vL.AñoActual)'}>} [Precio Neto]+[Iva Compra]),0,num([Month]))),([Month],(NUMERIC, ASCENDING))))),
IF(GetObjectDimension(0)='Dia del Año Venta',
SUM(aggr(rangesum(above(SUM({<[Year]={'$(vL.AñoActual)'}>} [Precio Neto]+[Iva Compra]),0,num([Dia del Año]))),([Dia del Año],(NUMERIC, ASCENDING))))),
IF(GetObjectDimension(0)='Semana Venta',
SUM(aggr(rangesum(above(SUM({<[Year]={'$(vL.AñoActual)'}>} [Precio Neto]+[Iva Compra]),0,num([Week]))),([Week],(NUMERIC, ASCENDING)))))
)
IF(GetObjectDimension(0)='Mes Venta',
SUM(aggr(rangesum(above(SUM({<[Year]={'$(vL.AñoActual)'}>} [Precio Neto]+[Iva Compra]),0,num([Month]))),([Month],(NUMERIC, ASCENDING))))),
IF(GetObjectDimension(0)='Dia del Año Venta',
SUM(aggr(rangesum(above(SUM({<[Year]={'$(vL.AñoActual)'}>} [Precio Neto]+[Iva Compra]),0,num([Dia del Año]))),([Dia del Año],(NUMERIC, ASCENDING))))),
IF(GetObjectDimension(0)='Semana Venta',
SUM(aggr(rangesum(above(SUM({<[Year]={'$(vL.AñoActual)'}>} [Precio Neto]+[Iva Compra]),0,num([Week]))),([Week],(NUMERIC, ASCENDING)))))
)
Vamos
a diseccionarla:
- · En lugar de utilizar IF anidados, usamos la función ALT, que es mucho más legible. Cada IF devuelve un valor numérico (si se cumple) o nulo, en cuyo caso el flujo del programa pasa al siguiente IF.
- · El valor con el que se compara GetObjectDimension(0) en cada IF es el texto que hayamos puesto en la etiqueta de la dimensión (ver imagen superior).
- · $(vL.AñoActual) Es una variable que contiene el año máximo de los seleccionados (=Max(Year)).
- · SUM(aggr(rangesum(above(SUM… Es la expresión que calcula toda la suma de ventas acumulada para cada unidad de tiempo (Month, Dia del Año o Week).
- · (NUMERIC, ASCENDING) Son dos parámetros (exclusivos de Sense y de View a partir de la versión 12) de la función AGGR que permiten ordenarla. Sin estos parámetros AGGR se ordena según el orden de carga.
No hay comentarios:
Publicar un comentario