SUMMARIZECOLUMNS

Возвращает сводную таблицу для набора групп.

Синтаксис

SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)  

Параметры

Термин Определение
groupBy_columnName Полная ссылка на столбец (таблица [столбец]) в базовой таблице, для которой различающиеся значения включаются в возвращаемую таблицу. Каждый столбец groupBy_columnName перекрестно соединен (в различных таблицах) или существует автоматически (в той же таблице) с последующими указанными столбцами.
filterTable Табличное выражение, которое добавляется в контекст фильтра всех столбцов, указанных как аргументы groupBy_columnName. Значения в таблице фильтров используются для фильтрации перед выполнением перекрестного соединения или автоматического существования.
name Строка, представляющая имя столбца, который используется для последующего указанного выражения.
expression Любое выражение DAX, возвращающее одиночное значение (не таблицу).

Возвращаемое значение

Таблица, содержащая сочетания значений из указанных столбцов, в зависимости от указанных параметров группирования. В возвращаемую таблицу включаются только строки, для которых по крайней мере одно из представленных выражений возвращает непустое значение. Если все выражения оценивают строку как BLANK/NULL, такая строка не включается в возвращаемую таблицу.

Remarks

  • Эта функция не гарантирует порядок сортировки результатов.

  • Столбец можно указать в параметре groupBy_columnName только один раз. Например, следующая формула недействительна.

    SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )

  • Эта функция не поддерживается для использования в режиме DirectQuery при использовании в вычисляемых столбцах или правилах безопасности на уровне строк (RLS).

Контекст фильтра

Обратите внимание на следующий запрос:

SUMMARIZECOLUMNS ( 
    'Sales Territory'[Category], 
    FILTER('Customer', 'Customer' [First Name] = "Alicia") 
)

В этом запросе столбцы groupBy без меры не содержат столбцов из выражения FILTER (например, из таблицы Customer). Фильтр не применяется к столбцам groupBy. Таблицы Sales Territory и Customer могут быть косвенно связаны с таблицей фактов Reseller sales. Поскольку они не связаны напрямую, выражение фильтра является холостой командой и столбцы groupBy не затрагиваются.

Однако с этим запросом:

SUMMARIZECOLUMNS ( 
    'Sales Territory'[Category], 'Customer' [Education], 
    FILTER('Customer', 'Customer'[First Name] = "Alicia") 
)

Столбцы groupBy содержат столбец, который затронут фильтром, и этот фильтр применяется к результатам groupBy.

С параметром IGNORE

Синтаксис IGNORE можно использовать для изменения поведения функции SUMMARIZECOLUMNS — она будет пропускать определенные выражения из вычисления BLANK/NULL. Строки, для которых все выражения, не использующие IGNORE, возвращают BLANK/NULL, будут исключены, независимо от того, является ли результатом вычисления выражений, использующих IGNORE, значение в BLANK/NULL. Функцию IGNORE можно использовать только в выражении SUMMARIZECOLUMNS.

Пример

SUMMARIZECOLUMNS( 
    Sales[CustomerId], "Total Qty", 
    IGNORE( SUM( Sales[Qty] ) ), 
    "BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 ) 
)

В результате получается сводный столбец Sales[CustomerId], в котором создается промежуточный итог для всех клиентов в заданной группе. Без параметра IGNORE результат будет следующим:

CustomerId TotalQty BlankIfTotalQtyIsNot3
Объект 5
B 3 3
C 3 3

С параметром IGNORE

CustomerId TotalQty BlankIfTotalQtyIsNot3
B 3 3
C 3 3

Все выражения пропускаются.

SUMMARIZECOLUMNS( 
    Sales[CustomerId], "Blank", 
    IGNORE( Blank() ), "BlankIfTotalQtyIsNot5", 
    IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) ) 
)

Несмотря на то, что оба выражения возвращают пустые значения для некоторых строк, они включаются, поскольку нет игнорируемых выражений, возвращающих пустое значение.

CustomerId TotalQty BlankIfTotalQtyIsNot3
Объект 5
B
C

С функцией NONVISUAL

Функция NONVISUAL помечает фильтр значений в функции SUMMARIZECOLUMNS как не влияющий на значения мер, но применяется только к столбцам группировки. Функцию NONVISUAL можно использовать только в выражении SUMMARIZECOLUMNS.

Пример

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]

Возвращает результат, где [Visual Total Sales] — это сумма за все годы:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 г. 9 791 060,30 29 358 677,22
2008 9 770 899,74 29 358 677,22

Один и тот же запрос без функции 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]

Возвращает результат, где [Visual Total Sales] — это сумма за два выбранных года:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 г. 9 791 060,30 19 561 960,04
2008 9 770 899,74 19 561 960,04

С функцией ROLLUPADDISSUBTOTAL

Добавление синтаксиса ROLLUPADDISSUBTOTAL изменяет поведение функции SUMMARIZECOLUMNS — к результату добавляются строки сводки или промежуточных итогов на основе столбцов groupBy_columnName. Функцию ROLLUPADDISSUBTOTAL можно использовать только в выражении SUMMARIZECOLUMNS.

Пример с одним промежуточным итогом

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]

Он возвращает следующую таблицу:

Категория Подкатегория IsCategorySubtotal IsSubcategorySubtotal Total Qty
Да Да 60398
Accessories False Да 36092
Accessories Велосипедные стойки False False 328
Bikes Горные велосипеды False False 4970
Clothing False Да 9101

Пример с несколькими промежуточными итогами

SUMMARIZECOUMNS ( 
    Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ), 
    ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] ) 
)

Продажи группируются по штату, по клиентам, по датам, с промежуточными итогами для 1. Продажи по штату, по датам 2. Продажи по штату, по клиентам 3. Сводка как по клиентам, так и по датам, ведущим к продажам по штату.

Он возвращает следующую таблицу:

CustomerID IsCustomerSubtotal Состояние Total Qty Дата IsDateSubtotal
Объект FALSE WA 5 7/10/2014
B FALSE WA 1 7/10/2014
B FALSE WA 2 7/11/2014
C FALSE ИЛИ 2 7/10/2014
C FALSE ИЛИ 1 7/11/2014
true WA 6 7/10/2014
true WA 2 7/11/2014
true ИЛИ 2 7/10/2014
true ИЛИ 1 7/11/2014
Объект FALSE WA 5 true
B FALSE WA 3 true
C FALSE OR 3 TRUE
TRUE WA 8 TRUE
TRUE ИЛИ 3 true

С функцией ROLLUPGROUP

Как и в случае с функцией SUMMARIZE, функцию ROLLUPGROUP можно использовать вместе с функцией ROLLUPADDISSUBTOTAL для указания того, какие сводные группы и детализации (промежуточные итоги) следует включить путем уменьшения количества возвращаемых строк промежуточных итогов. Функцию ROLLUPGROUP можно использовать только в выражении SUMMARIZECOLUMNS или SUMMARIZE.

Пример с несколькими промежуточными итогами

SUMMARIZECOLUMNS( 
    ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ), 
    ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] ) 
)

Группировка по городу и штату, однако со сведением при вычислении промежуточных итогов возвращается следующая таблица.

Состояние CustomerId IsCustomerSubtotal Total Qty City IsCityStateSubtotal
WA Объект FALSE 2 Бельвью FALSE
WA B FALSE 2 Бельвью FALSE
WA Объект FALSE 3 Redmond FALSE
WA B FALSE 1 Redmond FALSE
ИЛИ C FALSE 3 Портленд FALSE
WA true 4 Бельвью FALSE
WA true 4 Redmond FALSE
ИЛИ true 3 Портленд FALSE
Объект FALSE 5 FALSE
B FALSE 3 true
C FALSE 3 TRUE
TRUE 11 true

См. также

SUMMARIZE