Agregaciones anidadas
Cualquier nombre de campo en una expresión de gráfico debe ir incluido en exactamente una función de agregación. Si necesita anidar agregaciones, puede usar Aggr() para agregar un segundo nivel de agregación. Aggr() contiene una función de agregación como argumento.
Siempre un nivel de agregación en una función
Una app típica puede contener:
- un millón de registros en los datos
- cien filas en una tabla pivotante
- un único KPI, en un indicador o cuadro de texto
Los tres números pueden representar todos los datos, a pesar de la diferencia de magnitud. Los números son solo diferentes niveles de agregación.
Las funciones de agregación utilizan los valores de muchos registros como entrada y los contraen en un solo valor que puede verse como un resumen de todos los registros. Hay una restricción: no puede usar una función de agregación dentro de otra función de agregación. Por lo general necesitará que cada referencia de campo se ajuste en exactamente una función de agregación.
Las siguientes expresiones funcionarán:
- Sum(Sales)
- Sum(Sales)/Count(Order Number)
La expresión siguiente no funcionará, ya que es una agregación anidada:
- Count(Sum(Sales))
La solución a esto viene en la forma de la función Aggr(). Contrariamente a lo que parece por su nombre, no es una función de agregación. Es una función de "muchos a muchos", como una matriz en matemáticas. Convierte una tabla con N registros en una tabla con M registros. Devuelve una matriz de valores. También podría considerarse como una tabla simple virtual con una medida y una o varias dimensiones.
Usar Aggr() para agregaciones anidadas
Aggr() devuelve una matriz de valores para la expresión, calculados sobre la dimensión o dimensiones indicadas. Por ejemplo, el valor máximo de ventas, por cliente, por región. En agregaciones avanzadas, la función Aggr() va incluida dentro de otra función de agregación, utilizando la matriz de resultados de la función Aggr() como entrada a la agregación en la que está anidada.
Cuando se utiliza, la sentencia Aggr() produce una tabla virtual, con una expresión agrupada por una o más dimensiones. El resultado de esta tabla virtual se puede agregar aún más mediante una función de agregación externa.
Calcular el valor promedio más alto de pedidos
Utilizaremos una simple sentencia Aggr() en una expresión de gráfico.
Queremos poder mostrar nuestras métricas generales a nivel regional, pero también mostrar dos expresiones más complejas:
- El valor promedio de pedido más alto por gerente dentro de cada región.
- El gerente responsable de ese valor promedio de pedido más alto.
Podemos calcular fácilmente el valor promedio de pedido de cada región usando una expresión estándar Sum(Sales)/Count([Order Number]).
Dentro de la app, en la hoja Nested Aggregations hallará una tabla titulada Aggr() function.
Haga lo siguiente:
- Seleccione la tabla Aggr() function disponible.
Se abre el panel de propiedades. - Haga clic en Añadir columna y seleccione Medida.
- Haga clic en el símbolo .
Se abre el editor de expresiones. - Inserte lo siguiente: Sum(Sales)/Count([Order Number])
- Haga clic en Aplicar.
Nuestro objetivo es recuperar el valor promedio de pedido más grande para cada región. Tenemos que usar Aggr() para decirle a Qlik Sense que queremos obtener el valor promedio de pedido para cada región, por gerente, y luego mostrar el mayor de ellos. Para obtener el valor de pedido promedio para cada región, por gerente, tendremos que incluir estas dimensiones en nuestra sentencia Aggr():
Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)
Esta expresión hace que Qlik Sense produzca una tabla virtual que presenta el siguiente aspecto:
Cuando Qlik Sense calcula los valores promedio de pedido individuales para cada región, por gerente, necesitaremos encontrar el mayor de estos valores. Hacemos esto englobando la función Aggr() en Max():
Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))
Haga lo siguiente:
- Haga clic en Añadir columna y seleccione Medida.
- Haga clic en el símbolo .
Se abre el editor de expresiones. - Escriba lo siguiente: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Haga clic en Aplicar.
Puede ver el valor promedio más grande de pedido para todos los gerentes a nivel de región. ¡Esta es la primera de nuestras dos expresiones complejas! El siguiente requisito es tener el nombre del gerente responsable de estos valores promedio de pedido más altos que se muestran junto a los valores mismos.
Para hacer esto, usaremos la misma función Aggr() que antes, pero esta vez junto con la función FirstSortedValue(). La función FirstSortedValue() le dice a Qlik Sense que nos proporcione el gerente para la dimensión específica especificada en la segunda parte de la función:
FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))
Haga lo siguiente:
- Haga clic en Añadir columna y seleccione Medida.
- Haga clic en el símbolo .
Se abre el editor de expresiones. - Inserte lo siguiente: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Haga clic en Aplicar.
Para más información, vea Aggr
Para más información, vea FirstSortedValue