La función SUMMARIZE devuelve una tabla agregada según un conjunto de campos.
SUMMARIZE(
table,
[, groupBy_columnName]…
[, ROLLUP(groupBy_columnName [, groupBy_columnName]...)]
[, name, expression]…
)
- table: Referencia a una tabla o expresión DAX que devuelve una tabla.
- groupBy_columnName: Argumento opcional. Nombre totalmente cualificado de una columna existente en table o en alguna tabla relacionada para crear los grupos basados en los valores que se encuentren en ella. Puede añadirse más de un campo.
- name: Nombre dado a la columna que contendrá el total calculado en expression.
- expression: Expresión DAX que devuelve un escalar y que determinará los valores de la columna name.
La función SUMMARIZE devuelve una tabla teniendo como columnas las especificadas en el argumento groupBy_columnName (valores que van a especificar los criterios de agregación) y las añadidas como argumento name que contendrán el resultado de evaluar expression para las combinaciones de los campos groupBy_columnName. En el caso de añadir campos en el bloque ROLLUP, la tabla incluirá también totales parciales para las columnas que se indiquen.
Aun cuando SUMMARIZE permite la creación de columnas calculadas que se van a añadir a las resultantes de cruzar las especificadas por groupBy_columnName, este enfoque está considerado como una mala práctica, siendo más adecuado recurrir a la función SUMMARIZECOLUMNS o a la combinación de las funciones ADDCOLUMNS/SUMMARIZE con este objetivo. Por el contrario, el uso de SUMMARIZE está más recomendado cuando se desee obtener una tabla conteniendo todas las combinaciones posibles de los valores de dos columnas.
Cada columna que añadamos como name deberá ir acompañada de la expresión expression que la define. De otra forma la función devolverá un error.
Los campos groupBy_columnName deberán o bien pertenecer a table o bien a una tabla relacionada con ella.
Los nombres añadidos como name deberán ir encerrados entre comillas dobles.
Los campos añadidos como argumentos de ROLLUP no pueden figurar también como argumentos de SUMMARIZE (es decir, el nombre de una columna solo puede aparecer una vez en la fórmula).
El número de filas de la tabla vendrá determinado por el número de valores distintos que tomen los campos groupBy_columnName. Si, por ejemplo, solo se incluye un campo que tome 4 valores distintos, el resultado será una tabla con 4 filas. Si se incluyen dos campos que toman, respectivamente, 3 y 4 valores distintos, el resultado será una tabla con 4 x 3 = 12 filas (una para cada combinación de los valores de ambos campos). A este número de filas habrá que descontar aquellas para las que no haya datos (que, por defecto, se ocultan). Si, además, se añaden subtotales de algún campo, el número de filas aumentará.
El argumento groupBy_columnName es opcional. Si no se indica, la función agregará toda la tabla creando los campos indicados en name.
En este ejemplo partimos de una tabla conteniendo las ventas (Sales), una tabla con el calendario (Calendar) y otra con el listado de categorías a las que pertenecen los productos vendidos (Category). El objetivo es crear una tabla calculada que muestre, para cada año y para cada categoría, el total de ventas y el total de tasas pagadas (campos SalesAmount y TaxAmt de la tabla Sales, respectivamente).
Con este objetivo especificamos como argumentos de la función SUMMARIZE la tabla a agregar (Sales) y los campos cuyos valores definirán los criterios de agregación ('Calendar'[Year] y Category[Category]). Por último especificamos, por parejas, el nombre de la nueva columna y la expresión a obtener (en este caso la suma de los campos SalesAmount y TaxAmt)
Sales and taxes per category = SUMMARIZE(
Sales,
'Calendar'[Year],
Category[Category],
"Sales", SUM(Sales[SalesAmount]),
"Tax", SUM(Sales[TaxAmt])
)
El resultado es el siguiente:
Siguiendo con el mismo ejemplo, si añadimos el argumento ROLLUP haciendo referencia al campo Category[Category]:
Sales and taxes per category Roll up = SUMMARIZE(
Sales,
'Calendar'[Year],
ROLLUP(Category[Category]),
"Sales", SUM(Sales[SalesAmount]),
"Tax", SUM(Sales[TaxAmt])
)
...el resultado es el siguiente:
Se observa cómo se han añadido los subtotales del campo Category[Category].
Si, por el contrario, añadimos como argumento de ROLLUP el campo 'Calendar'[Year]:
Sales and taxes per category Roll up = SUMMARIZE(
Sales,
ROLLUP('Calendar'[Year]),
Category[Category],
"Sales", SUM(Sales[SalesAmount]),
"Tax", SUM(Sales[TaxAmt])
)
...el resultado es el siguiente:
En este caso, los subtotales se han añadido para el campo 'Calendar'[Year].
En este ejemplo partimos de una tabla de ventas, Sales, y una tabla con información sobre los productos en venta, Product, y deseamos generar una tabla calculada agregada a partir de Sales que muestre las ventas parciales para cada color de los productos disponibles, información contenida en la columna 'Product'[Color].
Suponiendo que exista una relación entre ambas tablas, podemos crear la siguiente medida:
Summarized sales = SUMMARIZE(
Sales,
'Product'[Color],
"Total sales", SUM(Sales[SalesAmount])
)
En ella estamos utilizando como campo para la agrupación el mencionado campo 'Product'[Color], y generando una columna llamada Total sales con la suma (contextualizada) de los importes de venta. El resultado es el mostrado a continuación: