SUMMARIZECOLUMNS
- Jaime Franco Jimenez

- 7 jul 2023
- 8 Min. de lectura
Nos va a devolver una tabla resumen de las columnas que le especifiquemos.
Sintaxis
SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)
· GroupBy_columnName, referencia a una columna de una tabla, en cada columna de groupBy_columnName, se realiza una combinación cruzada (tablas diferentes), o, de la misma tabla.
· FilterTable, es una expresión que se agrega al contexto de filtro existente en las columnas especificadas en el o los argumentos groupBy_columnName.
· Name, nombre de la nueva columna.
· Expresión, expresión que devuelve un único valor, no una tabla.
Si las expresiones se evalúan como BLANK, o, como NULL, esa fila no se incluye en la tabla devuelta.
No podemos especificar la misma columna en el argumento groupBy_columnName.
No podemos usar summarizecolumns en una medida.
Veamos un ejemplo, queremos saber en qué provincias ha vendido los centros comerciales de el corte inglés, y, Carrefour.
Vamos a crear una tabla, para ello, vamos a la pestaña herramientas de tablas, y, hacemos clic en nueva tabla.

Ponemos la función summarizecolumns, como argumento groupBy_columnName, ponemos la columna provincia de la tabla ejemplo.
ejemplo1 = SUMMARIZECOLUMNS (
Ejemplo[Provincia],
Como argumento filterTable, usamos la función OR, como primera condición, seleccionamos la columna centro y la igualamos, entre comillas dobles, a Carrefour.
ejemplo1 = SUMMARIZECOLUMNS (
Ejemplo[Provincia],
FILTER (Ejemplo, Or (
Ejemplo[Centro]="Carrefour"
Como segunda condición, volvemos a poner la columna centro, igualamos, entre comillas dobles a El corte inglés.
Cerramos paréntesis.
ejemplo1 = SUMMARIZECOLUMNS (
Ejemplo[Provincia],
FILTER (Ejemplo, Or (
Ejemplo[Centro]="Carrefour",
Ejemplo[Centro]="El corte ingles")))
Nos devuelve una tabla resumida por provincias, pero donde han vendido los centros comerciales el corte inglés, y, Carrefour.

Ahora, vamos a crear otra tabla para resumir por año, y, centro comercial, filtrando para el año 2020 y 2021, y, para los centros comerciales el corte inglés, y, Carrefour, y, que nos devuelva dos columnas, una con la cantidad, y, otra con el precio.
En la barra de fórmulas, ponemos la función SUMMARIZECOLUMNS, como argumento groupBy_columnName, ponemos la columna año, de nuevo, ponemos el argumento groupBy_columnName, y, ponemos la columna centro.
ejemplo2 = SUMMARIZECOLUMNS (
VENTAS[Año],
VENTAS[Centro]
Como argumento filterTable, usamos la función TREATAS, como argumento expresion_tabla, entre llaves, ponemos los años 2020 y 2021, como argumento columna, ponemos la columna año, es decir, va a filtrar la columna año por los años 2020, y, 2021.
ejemplo2 = SUMMARIZECOLUMNS (
VENTAS[Año],
VENTAS[Centro],
TREATAS ({2020,2021},
VENTAS[Año])
Ponemos otra función TREATAS, como argumento expresion_tabla, entre llaves, ponemos los años El corte inglés y Carrefour, como argumento columna, ponemos la columna centro, es decir, va a filtrar la columna centro por El corte inglés, y, Carrefour.
ejemplo2 = SUMMARIZECOLUMNS (
VENTAS[Año],
VENTAS[Centro],
TREATAS ({2020,2021},
VENTAS[Año]),
TREATAS ({"El corte ingles", "Carrefour"},
VENTAS[Centro]),
Como argumento name de SUMMARIZECOLUMNS, entre comillas dobles, ponemos Cantidad, como argumento expresión, sumamos la columna cantidad.
ejemplo2 = SUMMARIZECOLUMNS (
VENTAS[Año],
VENTAS[Centro],
TREATAS ({2020,2021},
VENTAS[Año]),
TREATAS ({"El corte ingles", "Carrefour"},
VENTAS[Centro]),
"Cantidad", SUM(VENTAS[Cantidad]),
Volvemos a poner el argumento name de SUMMARIZECOLUMNS, entre comillas dobles, ponemos Precio, como argumento expresión, sumamos la columna precio.
Cerramos paréntesis.
Ejemplo2 = SUMMARIZECOLUMNS (
VENTAS[Año],
VENTAS[Centro],
TREATAS ({2020,2021},
VENTAS[Año]),
TREATAS ({“El corte ingles”, “Carrefour”},
VENTAS[Centro]),
“Cantidad”, SUM(VENTAS[Cantidad]),
“Precio”, SUM(VENTAS[Precio]))
Aceptamos, y, tenemos una tabla resumida por año y centro por cantidad y precio.

Con la siguiente expresión, vamos a calcular la cantidad vendida para el corte inglés, donde agregamos una columna que va a ser la cantidad vendida por dicho centro, y, por último, agregamos una nueva columna que nos va a calcular el total general.
ejemplo3 = SUMMARIZECOLUMNS (
Ventas[Centro],
TREATAS ({"El corte ingles"},
Ventas[Centro]),
"cantidad",
SUM(Ventas[Cantidad]),
"Total",
SUMX (ALL(ventas), Ventas[Cantidad])
)
Con la siguiente expresión, usamos la función AddColumns, para añadir una columna, pero como argumento tabla, usamos summarizecolumns para que lo haga por centro comercial, y, como segundo argumento de AddColumns, creamos una columna llamada cantidad, para que nos devuelva la cantidad vendida por ese centro comercial, donde usamos la función Calculate.
ejemplo4 = ADDCOLUMNS (
SUMMARIZECOLUMNS (
ventas [Centro],
TREATAS ({"El corte ingles"},
ventas [Centro])),"Cantidad",
CALCULATE (SUM (ventas [Cantidad]),
ventas [Centro]="El corte ingles"))
También, podemos usar variables, por ejemplo, voy a crear una variable llamada criterio donde pongo la función treatas.
var criterio=TREATAS ({"El corte inglés"}, ventas [Centro])
Debo de poner la palabra return para poder usarla.
var criterio=TREATAS ({"El corte inglés"}, ventas [Centro])
return
Ahora, modificamos la expresión, quitamos donde especificamos el criterio, y, ponemos la variable, también, ponemos la variable dentro de Calculate, ya que es el mismo criterio.
Tabla =
var criterio=TREATAS ({"El corte ingles"}, ventas [Centro]) return
ADDCOLUMNS (
SUMMARIZECOLUMNS (ventas [Centro],
criterio),
"Cantidad",
CALCULATE (SUM (ventas [Cantidad]),
criterio)
)
Vemos que el resultado es el mismo.

También, podría crear una variable, llamada, por ejemplo, suma, donde pongo la función summarize, y, uso la variable criterio.
var criterio=TREATAS ({"El corte ingles"}, ventas [Centro])
var suma=SUMMARIZECOLUMNS (ventas [Centro], criterio)
return
ADDCOLUMNS (
suma,
"Cantidad",
CALCULATE (SUM (ventas [Cantidad]),
criterio)
)
Ahora, la sintaxis es más corta.
Con la siguiente expresión, vamos a crear una tabla resumida por producto y por año.
ejemplo5 = SUMMARIZECOLUMNS (
Ventas[Provincia],
Ventas [año]),
Lo siguiente que vamos a hacer es añadir después del signo igual, la función AddColumns, para añadir una columna que nos calcule la cantidad vendida por cada provincia.
Como argumento tabla, usamos la función summarizecolummns, que nos devuelve una tabla resumida por provincia y año.
ejemplo5 = ADDCOLUMNS (
SUMMARIZECOLUMNS (
Ventas[Provincia],
Ventas [año]),
Damos nombre a la nueva columna, y, usamos CALCULATE, para que nos de la suma de la columna cantidad.
ejemplo5 = ADDCOLUMNS (
SUMMARIZECOLUMNS (
Ventas[Provincia],
Ventas [año]),
"Total", CALCULATE (
SUM(Ventas[Cantidad])))
Aceptamos, y, tenemos el total por provincia, y, año.

Hay que decir que summarizecolumns, lleva implícito un contexto de fila y de filtro, por ejemplo, la siguiente expresión crea una tabla que resume por año y producto, donde se crea una columna que pregunta si el año es igual a 2017, que nos devuelva la cantidad.
ejemplo6 = SUMMARIZE (
Ventas,
calendario[año],
Ventas[Producto],
"Total",
IF (
calendario[año]=2017,
SUMx (Ventas, Ventas[Cantidad])
))
Como resultado, tenemos una tabla con las cantidades vendidas para cada producto en el año 2017.

Si creo una nueva tabla con la misma expresión, pero con SUMMARIZECOLUMNS, en la cual no tengo que poner el argumento tabla, devolverá un error.
ejemplo7 = SUMMARIZECOLUMNS (
Calendario[Año],
Ventas[Producto],
"ww",
IF(Calendario[Año]=2017,
SUM(Ventas[Cantidad]),BLANK())
)
Esto es porque no tiene un contexto de fila, es decir, no recorre la tabla fila a fila, esto lo solventamos con la función VALUES, que nos devuelve los valores únicos, y, creara ese contexto de fila.
ejemplo7 = SUMMARIZECOLUMNS (
Calendario[Año],
Ventas[Producto],
"ww",
IF(VALUES(Calendario[Año]=2017),
SUM(Ventas[Cantidad]),BLANK())
)
IGNORE
Ahora, vamos a ver la función IGNORE, que cambia el comportamiento de la función SUMMARIZECOLUMNS, de forma predeterminada, la función SUMMARIZECOLUMNS, no devuelve filas vacías, pero, si usamos la función IGNORE, estas filas vacías se evalúan como blanco, o, nulo.
Solo podeos usar la función IGNORE con la función SUMMARIZECOLUMNS.
Sintaxis
IGNORE(<expression>)
El argumento expresión, es cualquier expresión que devuelva un solo valor, no una tabla.
Vamos a trabajar con la misma tabla, pero, se llama Ventas2, y, en la columna total, no hay datos para el año 2017, creamos una nueva tabla, ponemos SUMMARIZECOLUMNS, como argumento groupBy_columnName, ponemos la columna año de la tabla calendario, como argumento name, entre comillas dobles, ponemos total, como argumento expresión, he creado una medida llamada totales, que suma la columna total, cerramos paréntesis.
ejemplo8 = SUMMARIZECOLUMNS(
Calendario[Año],
"total",
[totales])
Tenemos una primera columna con los años, pero vemos que no aparece el año 2017, y, el total para el resto de los años.

Queremos ver ese o esos años que no contienen datos la columna de total, para ello, ponemos la función IGNORE antes de la medida, y, crea una secuencia de años desde el primer año hasta el ultimo año, aunque dicho año no esté en el modelo.

NONVISUAL
Esta función es un modificador de filtro de SUMMARIZECOLUMNS, solo tiene un argumento que es expresión, y, cambia el comportamiento de una medida que use la función ALLSELECTED dentro de SUMMARIZECOLUMNS.
Veamos un ejemplo, seguimos trabajando con Ventas2, vamos a crear una nueva tabla.
Ponemos la función SUMMARIZECOLUMNS, como argumento groupBy_columnName, ponemos la columna año de la tabla calendario, como argumento filterTable, usamos la función TREATAS, y, filtramos la tabla calendario por los años 2020, y, 2021, como argumento name, entre comillas dobles, ponemos Ventas, como argumento expresión, ponemos la medida de totales, volvemos a poner el argumento name, y, la llamamos Total Ventas, como argumento expresión, usamos CALCULATE, como argumento expresión, ponemos la medida totales, como argumento filter1, ponemos la función ALLSELECTED, y, ponemos la columna año de calendario, ALLSELECTED restaura el filtro creado por SUMMARIZECOLUMNS, que contiene solo dos años.
ejemplo9 =
SUMMARIZECOLUMNS(
Calendario[Año],
TREATAS({2020, 2021}, Calendario[Año]),
"Ventas", [totales],
"Total Ventasponemos", CALCULATE([totales], ALLSELECTED(Calendario[Año]))
Aceptamos, tenemos una primera columna con los años 2020, y, 2021, una segunda columna con las ventas para cada año, y, una tercera columna con la suma de ambos años.

Pero, si queremos ver el total para todos los años, ponemos la función NONVISUAL, y, encerramos la función TREATAS, cuando usamos esta función alrededor de un filtro, no restringimos el resultado solo al año 2020, y, 2021, sino a todos los años.
Ahora, tenemos el total de todos los años.

ROLLUPADDISSUBTOTAL
Esta función es un modificador de SUMMARIZECOLUMNS, que nos permite calcular subtotales, obtendremos mas filas en la consulta, identificando si una fila es un subtotal o no.
Sintaxis
ROLLUPADDISSUBTOTAL ( [<grandtotalFilter>], <groupBy_columnName>, <name> [, [<groupLevelFilter>] [, <groupBy_columnName>, <name> [, [<groupLevelFilter>] [, … ] ] ] ] )
· grandtotalFilter, argumento opcional, es un filtro que se va a aplicar a nivel general.
· groupBy_columnName, nombre de una columna existente que se usara para crear grupos de resumen, no puede ser una expresión.
· Name, nombre de la nueva columna, estos valores se calculan con la función ISSBTOTAL.
· groupLevelFilter, argumento opcional, filtro a aplicar a nivel actual.
Seguimos trabajando con el modelo Ventas2.
Creamos una nueva tabla, creamos una variable, donde con TREATAS filtramos la tabla calendario por los años 2020, y, 2021.
ejemplo10 =
VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
Creamos otra variable, y, almacenamos la columna centro de Ventas2 por Metromar y Carrefour.
ejemplo10 =
VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro])
Ponemos la palabra return.
Ponemos la función SUMMARIZECOLUMNS, como argumento groupBy_columnName, ponemos la columna producto.
ejemplo10 =
VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro])
return
SUMMARIZECOLUMNS(
Ventas2[Producto]
Como argumento, de nuevo, groupBy_columnName, usamos la función ROLLUPADDISSUBTOTAL, como argumento groupBy_columnName, ponemos la columna año de la tabla calendario, como argumento name, ponemos, entre comillas dobles, Total por año, cerramos paréntesis, estamos solicitando un subtotal por año, donde en una columna llamada Total por año, aparecerá false donde no sea un subtotal, y, false donde si lo sea.
ejemplo10 =
VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro
return
SUMMARIZECOLUMNS(
Ventas2[Producto],
ROLLUPADDISSUBTOTAL(Calendario[Año],"Total por año")
Como argumento filterTable, ponemos la variable filtroyears, volvemos a poner el argumento filterTable, y, ponemos la variable filtrocentro.
ejemplo10 =
VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro])
return
SUMMARIZECOLUMNS(
Ventas2[Producto],
ROLLUPADDISSUBTOTAL(Calendario[Año],"Total por año"),
filtroyears,
filtrocentro
Como argumento name, entre comillas dobles, ponemos Total, como argumento expresión, ponemos la medida totales, cerramos paréntesis.
ejemplo10 =
VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro])
return
SUMMARIZECOLUMNS(
Ventas2[Producto],
ROLLUPADDISSUBTOTAL(Calendario[Año],"Total por año"),
filtroyears,
filtrocentro,
"Total",[totales])
Aceptamos, tenemos una primera columna con los productos, aparece el mismo producto dos veces, una vez para el año 2020, y, otra para el año 2021, una segunda columna con los años 2020, y, 2021, podemos ver que después del ultimo año, aparecen los mismos productos en la columna producto pero blanco en la columna año, tenemos otra columna llamada Total por año, donde aparece false donde no es un subtotal, y, true donde si lo es, por último, tenemos una columna llamada total con el total para cada producto, y, donde aparece true, es el subtotal de cada producto.

Podemos agregar más de una función ROLLUPADDISSUBTOTAL, en este caso, queremos un subtotal por provincia.
ejemplo10 =
VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro])
return
SUMMARIZECOLUMNS(
Ventas2[Producto],
ROLLUPADDISSUBTOTAL(Calendario[Año],"SubTotal por año"),
ROLLUPADDISSUBTOTAL(Ventas2[Provincia],"SubTotal por provincia"),
filtroyears,
filtrocentro,
"Total",[totales])
Vamos a tener subtotales combinados, en este caso, estamos usando año de la tabla calendario, y, centro de la tabla Ventas2, donde tenemos dos columnas, una llamada Subtotal por año, y, otra llamada Subtotal por provincia, tenemos los valores normales de una consulta, que son las columnas producto, año, y, provincia, después, tenemos el total para cada producto, año, y, provincia, después tenemos el subtotal por años, y, por provincia.
En la siguiente línea, vemos false en el subtotal por año, quiere decir que esta cantidad no pertenece al año, pero, vemos true en subtotal por provincia, quiere decir que esta cantidad pertenece al subtotal por provincia.

En la siguiente línea, el subtotal es por año.

En vez de usar dos veces la función ROLLUPADDISSUBTOTAL, para ello, debemos de usar, otra vez, los argumentos groupBy_columnName, y, name, y, borramos la segunda función ROLLUPADDISSUBTOTAL.
ejemplo11 = VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro])
return
SUMMARIZECOLUMNS(
Ventas2[Producto],
ROLLUPADDISSUBTOTAL(Calendario[Año],"SubTotal por año",
Ventas2[Provincia],"SubTotal por provincia"),
filtroyears,
filtrocentro,
"Total",[totales])
ROLLUPGROUP
Esta función modifica el comportamiento de las funciones SUMMARIZE y SUMMARIZECOLUMNS mediante la incorporación de filas de resumen.
Sintaxis
ROLLUPGROUP ( <groupBy_columnName> [, <groupBy_columnName> [, … ] ] )
· groupBy_columnName, nombre de una columna existente, o, función ROLLUPGROUP que se usara para crear grupos de resumen.
Esta función nos va a permitir tratar una serie de columnas como si fuese un solo grupo, siguiendo con el ejemplo anterior, en la función ROLLUPADDISSUBTOTAL, encerramos los parámetros de dicha función en la función ROLLUPGROUP.
ejemplo11 = VAR filtroyears=TREATAS({2020,2021},Calendario[Año])
VAR filtrocentro = TREATAS({"Metromar", "Carrefour"}, Ventas2[Centro])
return
SUMMARIZECOLUMNS(
Ventas2[Producto],
ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Calendario[Año]),"SubTotal por año",
Ventas2[Provincia],"SubTotal por provincia"),
filtroyears,
filtrocentro,
"Total",[totales])
Miguel Angel Franco




Comentarios