ROLLUP

La función ROLLUP identifica un subconjunto de campos de la tabla siendo agregada mediante la función SUMMARIZE, campos para los que se generarán subtotales.

Sintaxis

ROLLUP(
    groupBy_columnName
    [, groupBy_columnName]
)

Parámetros
  • groupBy_columnName: Nombre totalmente cualificado de una columna existente en la tabla referenciada en la función SUMMARIZE o en alguna tabla relacionada. Puede añadirse más de un campo.
Valor devuelto

La función ROLLUP provoca la generación de una o más líneas en la tabla de agregación con los subtotales de los grupos formados por los campos de agregación excluyendo los añadidos como argumentos de ROLLUP. Véanse ejemplos más adelante.

Información adicional

La función ROLLUP solo puede ser usada como argumento de la función SUMMARIZE.

Ejemplos

Para mostrar el funcionamiento de esta función, partimos de la siguiente tabla de datos ("Data"):

Datos de partida

A continuación, creamos una tabla agregada mediante la función SUMMARIZE, utilizando como campo de agrupación el campo Category:

Summarized table = 
SUMMARIZE(
    Data,
    Data[Category],
    "Sum", SUM(Data[Value]),
    "Max", MAX(Data[Value]),
    "Avg", AVERAGE(Data[Value])
)

Tabla agrupada

Tal y como cabría esperar, los campos creados en esta tabla (Sum, Max y Avg) se calculan sobre los registros de cada una de las categorías.

Ahora creamos una tabla semejante, pero especificando que el campo Category sea un campo de "rollup":

Summarized table Rollup_Cat = 
SUMMARIZE(
    Data,
    ROLLUP(Data[Category]),
    "Sum", SUM(Data[Value]),
    "Max", MAX(Data[Value]),
    "Avg", AVERAGE(Data[Value])
)

Tabla agregada con ROLLUP

Comprobamos que se ha generado una nueva línea mostrando subtotales para todos los grupos de campos de agrupación especificados en la función SUMMARIZE menos los incluidos en la función ROLLUP (es decir, para ningún grupo de campos -pues el único campo referenciado en la función SUMMARIZE es el incluido en la función ROLLUP-, lo que significa que en la nueva línea se calculan subtotales involucrando todos los datos de la tabla original).

Creemos ahora una tabla agregada utilizando como campos de agregación tanto Category como Subcategory:

Summarized table Cat_Subcat = 
SUMMARIZE(
    Data,
    Data[Category],
    Data[Subcategory],
    "Sum", SUM(Data[Value]),
    "Max", MAX(Data[Value]),
    "Avg", AVERAGE(Data[Value])
)

Tabla agregada por Category y Subcategory

Si especificamos en esta tabla que el campo Category es un campo de "rollup", el resultado es el siguiente:

Summarized table Subcat_Rollup_Cat = 
SUMMARIZE(
    Data,
    ROLLUP(Data[Category]),
    Data[Subcategory],
    "Sum", SUM(Data[Value]),
    "Max", MAX(Data[Value]),
    "Avg", AVERAGE(Data[Value])
)

Tabla agregada por Category (Rollup) y Subcategory

Vemos que la tabla agregada resultante, además de los campos Sum, Max y Avg correspondientes a los diferentes grupos de registros resultantes de combinar los valores de los campos Category y Subcategory, incluye 6 nuevas líneas, con los subtotales correspondientes a los grupos creados (combinaciones de los campos Category y Subcategory) excluyendo el campo Category que se ha incluido como argumento en la función ROLLUP, es decir, con subtotales de los grupos formados solo por el campo Subcategory. Como este campo puede tomar 6 valores, se han añadido 6 nuevas filas.

Si, por el contrario, incluyésemos como argumento de la función ROLLUP el campo Subcategory:

Summarized table Cat_Rollup_Subcat = 
SUMMARIZE(
    Data,
    Data[Category],
    ROLLUP(Data[Subcategory]),
    "Sum", SUM(Data[Value]),
    "Max", MAX(Data[Value]),
    "Avg", AVERAGE(Data[Value])
)

Tabla agregada por Category y Subcategory (Rollup)

...veríamos que, en esta ocasión, se han añadido 3 nuevas filas a la tabla agregada, filas correspondientes a los tres valores que toma el campo Category, subconjunto de los campos involucrados en la función SUMMARIZE que no están incluidos en la función ROLLUP.

Siguiendo con el mismo ejemplo, si creamos la misma tabla de agregación pero especificando que tanto el campo Category como el campo Subcategory sean de tipo "rollup" (y en este orden), el resultado sería el siguiente:

Summarized table Rollup_Cat_Subcat = 
SUMMARIZE(
    Data,
    ROLLUP(Data[Category], Data[Subcategory]),
    "Sum", SUM(Data[Value]),
    "Max", MAX(Data[Value]),
    "Avg", AVERAGE(Data[Value])
)

Tabla agregada por Category y Subcategory (Ambos de tipo rollup)

En este caso, se han incluido 3 filas correspondientes al campo situado como argumento más a la derecha de la función ROLLUP (Subcategory) y, a continuación, una fila adicional considerando los dos campos (Category y Subcategory).

Por último, si repetimos la tabla pero cambiando el orden de los argumentos de la función ROLLUP:

Summarized table Rollup_Subcat_Cat = 
SUMMARIZE(
    Data,
    ROLLUP(Data[Subcategory], Data[Category]),
    "Sum", SUM(Data[Value]),
    "Max", MAX(Data[Value]),
    "Avg", AVERAGE(Data[Value])
)

Tabla agregada por Subcategory y Category (Ambos de tipo rollup)

...el resultado es semejante: se han creado 6 nuevas filas correspondientes al campo situado más a la derecha de los argumentos de la función ROLLUP, y una línea adicional considerando los dos campos.

Funciones relacionadas
Categoría
Estadísticas
Enviado por admin el Dom, 30/06/2019 - 18:35