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 Cantidad total BlankIfTotalQtyIsNot3
A 5
B 3 3
C 3 3

Con IGNORE:

CustomerId Cantidad total 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 En blanco BlankIfTotalQtyIsNot5
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

SUMMARIZECOLUMNS ( 
    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 false WA 1 10/07/2014
B false 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 false 3 Portland false
WA true 4 Bellevue false
WA true 4 Redmond false
O BIEN true 3 Portland false
A false 5 FALSO
B false 3 true
C false 3 TRUE
TRUE 11 VERDADERO

SUMMARIZE