SUMMARIZECOLUMNS
Devuelve una tabla de resumen sobre un conjunto de grupos.
Sintaxis
SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)
Parámetros
Término | Definición |
---|---|
groupBy_columnName | Referencia de columna completa (Table[Column]) a una tabla base para la que se incluyen los valores diferenciados en la tabla devuelta. En cada columna groupBy_columnName se realiza una operación de combinación cruzada (tablas diferentes) o de existencia automática (la misma tabla) con las columnas siguientes especificadas. |
filterTable | Expresión de tabla que se agrega al contexto de filtro de todas las columnas especificadas como argumentos groupBy_columnName. Los valores presentes en la tabla de filtros se usan para filtrar antes de que se realice la operación de combinación cruzada o de existencia automática. |
name | Cadena que representa el nombre de columna que se va a usar para la expresión siguiente especificada. |
expression | Cualquier expresión DAX que devuelva un único valor (no una tabla). |
Valor devuelto
Una tabla que incluye combinaciones de valores de las columnas proporcionadas en función de la agrupación especificada. Solo se incluyen en la tabla devuelta las filas para las que al menos una de las expresiones proporcionadas devuelve un valor que no está en blanco. Si todas las expresiones se evalúan como BLANK/NULL para una fila, esa fila no se incluye en la tabla devuelta.
Notas
Esta función no garantiza ningún criterio de ordenación para los resultados.
No se puede especificar una columna más de una vez en el parámetro groupBy_columnName. Por ejemplo, la fórmula siguiente no es válida.
SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )
Esta función no se admite para su uso en el modo DirectQuery cuando se utiliza en columnas calculadas o en reglas de seguridad de nivel de fila (RLS).
Contexto de filtro
Considere la consulta siguiente:
SUMMARIZECOLUMNS (
'Sales Territory'[Category],
FILTER('Customer', 'Customer' [First Name] = "Alicia")
)
En esta consulta, sin una medida, las columnas groupBy no contienen ninguna columna de la expresión FILTER (por ejemplo, de la tabla Customer). El filtro no se aplica a las columnas groupBy. Las tablas Sales Territory y Customer pueden estar indirectamente relacionadas a través de la tabla de hechos Reseller sales. Como no están relacionadas directamente, la expresión de filtro es no-op y las columnas groupBy no se ven afectadas.
Pero con esta consulta:
SUMMARIZECOLUMNS (
'Sales Territory'[Category], 'Customer' [Education],
FILTER('Customer', 'Customer'[First Name] = "Alicia")
)
Las columnas groupBy contienen una columna que se ve afectada por el filtro y dicho filtro se aplica a los resultados de groupBy.
Con IGNORE
La sintaxis IGNORE se puede usar para modificar el comportamiento de la función SUMMARIZECOLUMNS omitiendo expresiones específicas de la evaluación BLANK/NULL. Las filas para las que todas las expresiones que no usen IGNORE devuelvan BLANK/NULL se excluirán, aunque las expresiones que usen IGNORE se evalúen como BLANK/NULL. IGNORE solo se puede usar en una expresión SUMMARIZECOLUMNS.
Ejemplo
SUMMARIZECOLUMNS(
Sales[CustomerId], "Total Qty",
IGNORE( SUM( Sales[Qty] ) ),
"BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 )
)
Acumula la columna Sales[CustomerId] y crea un subtotal para todos los clientes de la agrupación especificada. Sin IGNORE, el resultado es el siguiente:
CustomerId | TotalQty | BlankIfTotalQtyIsNot3 |
---|---|---|
A | 5 | |
B | 3 | 3 |
C | 3 | 3 |
Con IGNORE:
CustomerId | TotalQty | BlankIfTotalQtyIsNot3 |
---|---|---|
B | 3 | 3 |
C | 3 | 3 |
Todas las expresiones omitidas:
SUMMARIZECOLUMNS(
Sales[CustomerId], "Blank",
IGNORE( Blank() ), "BlankIfTotalQtyIsNot5",
IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) )
)
Aunque ambas expresiones devuelven un valor en blanco para algunas filas, se incluyen porque no hay expresiones no omitidas que devuelven valores en blanco.
CustomerId | TotalQty | BlankIfTotalQtyIsNot3 |
---|---|---|
A | 5 | |
B | ||
C |
Con NONVISUAL
La función NONVISUAL marca un filtro de valor en la función SUMMARIZECOLUMNS como que no afecta a los valores de medida, sino que solo se aplica a las columnas groupBy. NONVISUAL solo se puede usar en una expresión SUMMARIZECOLUMNS.
Ejemplo
DEFINE
MEASURE FactInternetSales[Sales] = SUM(FactInternetSales[Sales Amount])
EVALUATE
SUMMARIZECOLUMNS
(
DimDate[CalendarYear],
NONVISUAL(TREATAS({2007, 2008}, DimDate[CalendarYear])),
"Sales", [Sales],
"Visual Total Sales", CALCULATE([Sales], ALLSELECTED(DimDate[CalendarYear]))
)
ORDER BY [CalendarYear]
Devuelve un resultado en el que [Visual Total Sales] es el total entre todos los años:
DimDate[CalendarYear] | [Sales] | [Visual Total Sales] |
---|---|---|
2007 | 9 791 060,30 | 29 358 677,22 |
2008 | 9 770 899,74 | 29 358 677,22 |
En cambio, la misma consulta sin la función NONVISUAL:
DEFINE
MEASURE FactInternetSales[Sales] = SUM(FactInternetSales[Sales Amount])
EVALUATE
SUMMARIZECOLUMNS
(
DimDate[CalendarYear],
TREATAS({2007, 2008}, DimDate[CalendarYear]),
"Sales", [Sales],
"Visual Total Sales", CALCULATE([Sales], ALLSELECTED(DimDate[CalendarYear]))
)
ORDER BY [CalendarYear]
Devuelve un resultado en el que [Visual Total Sales] es el total entre los dos años seleccionados:
DimDate[CalendarYear] | [Sales] | [Visual Total Sales] |
---|---|---|
2007 | 9 791 060,30 | 19 561 960,04 |
2008 | 9 770 899,74 | 19 561 960,04 |
Con ROLLUPADDISSUBTOTAL
La suma de la sintaxis ROLLUPADDISSUBTOTAL modifica el comportamiento de la función SUMMARIZECOLUMNS al agregar filas de acumulación o subtotal al resultado en función de las columnas de groupBy_columnName. ROLLUPADDISSUBTOTAL solo se puede usar en una expresión SUMMARIZECOLUMNS.
Ejemplo con un solo subtotal
DEFINE
VAR vCategoryFilter =
TREATAS({"Accessories", "Clothing"}, Product[Category])
VAR vSubcategoryFilter =
TREATAS({"Bike Racks", "Mountain Bikes"}, Product[Subcategory])
EVALUATE
SUMMARIZECOLUMNS
(
ROLLUPADDISSUBTOTAL
(
Product[Category], "IsCategorySubtotal", vCategoryFilter,
Product[Subcategory], "IsSubcategorySubtotal", vSubcategoryFilter
),
"Total Qty", SUM(Sales[Qty])
)
ORDER BY
[IsCategorySubtotal] DESC, [Category],
[IsSubcategorySubtotal] DESC, [Subcategory]
Devuelve la tabla siguiente:
Category | Subcategoría | IsCategorySubtotal | IsSubcategorySubtotal | Cantidad total |
---|---|---|---|---|
True | True | 60 398 | ||
Accessories | False | True | 36 092 | |
Accessories | Marcos de bicicletas | False | False | 328 |
Bikes | Bicicletas de montaña | False | False | 4970 |
Clothing | False | True | 9101 |
Ejemplo con varios subtotales
SUMMARIZECOUMNS (
Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] )
)
Las ventas se agrupan por estado, por cliente, por fecha, con subtotales de 1. Ventas por estado, por fecha 2. Ventas por estado, por cliente 3. Se acumula tanto en el cliente como en la fecha, lo que conduce a las ventas por estado.
Devuelve la tabla siguiente:
CustomerID | IsCustomerSubtotal | State | Cantidad total | Date | IsDateSubtotal |
---|---|---|---|---|---|
A | false | WA | 5 | 10/07/2014 | |
B | FALSO | WA | 1 | 10/07/2014 | |
B | FALSO | WA | 2 | 11/07/2014 | |
C | false | O BIEN | 2 | 10/07/2014 | |
C | false | O BIEN | 1 | 11/07/2014 | |
true | WA | 6 | 10/07/2014 | ||
true | WA | 2 | 11/07/2014 | ||
true | O BIEN | 2 | 10/07/2014 | ||
true | O BIEN | 1 | 11/07/2014 | ||
A | false | WA | 5 | true | |
B | false | WA | 3 | true | |
C | false | O BIEN | 3 | TRUE | |
VERDADERO | WA | 8 | TRUE | ||
VERDADERO | O BIEN | 3 | true |
Con ROLLUPGROUP
Al igual que con la función SUMMARIZE, ROLLUPGROUP se puede usar junto con ROLLUPADDISSUBTOTAL para especificar qué grupos de resumen o granularidades (subtotales) se incluirán, lo que reduce el número de filas de subtotal devueltas. ROLLUPGROUP solo se puede usar en una expresión SUMMARIZECOLUMNS o SUMMARIZE.
Ejemplo con varios subtotales
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] )
)
Todavía se agrupan por ciudad y estado, pero se acumulan cuando notificar un subtotal devuelve la tabla siguiente:
State | CustomerId | IsCustomerSubtotal | Cantidad total | City (Ciudad) | IsCityStateSubtotal |
---|---|---|---|---|---|
WA | A | false | 2 | Bellevue | false |
WA | B | false | 2 | Bellevue | false |
WA | A | false | 3 | Redmond | false |
WA | B | false | 1 | Redmond | false |
O BIEN | C | FALSO | 3 | Portland | false |
WA | true | 4 | Bellevue | false | |
WA | true | 4 | Redmond | false | |
O BIEN | true | 3 | Portland | false | |
A | false | 5 | FALSO | ||
B | FALSO | 3 | true | ||
C | FALSO | 3 | TRUE | ||
TRUE | 11 | true |