Saltar al contenido principal

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.

Nota de sugerenciaUtilice la función Aggr() en dimensiones calculadas si desea crear agregaciones de gráfico anidadas en múltiples niveles.

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 mayor valor promedio de pedido

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:

  1. Seleccione la tabla Aggr() function disponible.
    Se abre el panel de propiedades.
  2. Haga clic en Añadir columna y seleccione Medida.
  3. Haga clic en el símbolo 3.
    Se abre el editor de expresiones.
  4. Escriba lo siguiente: Sum(Sales)/Count([Order Number])
  5. Haga clic en Aplicar.

Tabla que muestra el valor promedio de pedido por región.

Table showing average order value per region.

Nota de sugerenciaComo práctica recomendada, asegúrese de que sus datos tengan el formato adecuado. En este caso, en cada columna cambiaremos la Etiqueta para representar el cálculo. En columnas con valores monetarios cambiaremos el Formato numérico a Moneda y el Patrón de formato a $ #,##0;-$ #,##0.

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:

Tabla virtual de la función Aggr() que muestra el valor promedio de pedido para cada región, por gerente.

table with AGGR function showing average order value for each region, per manager.

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:

  1. Haga clic en Añadir columna y seleccione Medida.
  2. Haga clic en el símbolo 3.
    Se abre el editor de expresiones.
  3. Escriba lo siguiente: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
  4. Haga clic en Aplicar.

Tabla que muestra la región, el valor promedio de pedido y el valor promedio de pedido más grande para cada región, por gerente.

Table showing region, average order value, and largest average order value for each region, per manager.

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))

Nota de sugerenciaHay una parte pequeña, pero muy importante, de la expresión: un símbolo menos antes de la expresión Aggr(). Dentro de una función FirstSortedValue(), puede especificar el criterio de ordenación de la matriz de datos. En este caso, el símbolo menos le dice a Qlik Sense que ordene de mayor a menor.

Haga lo siguiente:

  1. Haga clic en Añadir columna y seleccione Medida.
  2. Haga clic en el símbolo Expression .
    Se abre el editor de expresiones.
  3. Escriba lo siguiente: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
  4. Haga clic en Aplicar.

Tabla que muestra la región, el valor promedio de pedido, el valor promedio de pedido más grande de cada región y el gerente responsable de ese valor de pedido.

Table showing region, average order value, largest average order value for each region, and manager responsible for that order value.

Para más información, vea Aggr

Para más información, vea FirstSortedValue