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 |