SUMMARIZECOLUMNS

Применяется к:вычисляемой таблице вычисляемой таблицы Вычисление визуального элемента измерениявычисляемой таблицы

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

Синтаксис

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

Параметры

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

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

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

Замечания

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

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

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

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

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

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

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

В этом запросе без меры столбцы groupBy не содержат столбцов из выражения FILTER (например, из таблицы Customer). Фильтр не применяется к столбцам groupBy. Таблицы "Территория продаж" и "Клиент" могут быть косвенно связаны с помощью таблицы фактов продаж торгового посредника. Так как они не связаны напрямую, выражение фильтра является no-op, и столбцы groupBy не влияют.

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

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

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

С помощью IGNORE

Синтаксис IGNORE можно использовать для изменения поведения функции SUMMARIZECOLUMNS, пропуская определенные выражения из вычисления BLANK/NULL. Строки, для которых все выражения, не использующие значение IGNORE return BLANK/NULL, будут исключены независимо от того, будут ли выражения, использующие IGNORE, оценивать значение BLANK/NULL или нет. ИГНОРИРОВАТЬ можно использовать только в выражении SUMMARIZECOLUMNS.

Пример

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

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

CustomerId Всего Qty BlankIfTotalQtyIsNot3
а 5
Б 3 3
C 3 3

С помощью IGNORE,

CustomerId Всего Qty BlankIfTotalQtyIsNot3
Б 3 3
C 3 3

Все выражения игнорируются,

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

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

CustomerId Пробел BlankIfTotalQtyIsNot5
а 5
Б
О

С НЕВИЗУАЛЬНЫМ

Функция NONVISUAL обозначает фильтр значений в функции SUMMARIZECOLUMNS как не влияющую на значения меры, но применяется только к столбцам groupBy. 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]

Возвращает результат, в котором [визуальный итог продаж] — это общее количество в течение всех лет:

DimDate[CalendarYear] [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]

Возвращает результат, в котором [визуальный итог продаж] — это общее число в течение двух выбранных лет:

DimDate[CalendarYear] [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 Всего Qty
Истина Истина 60398
Аксессуары False Истина 36092
Аксессуары Багажники для велосипедов False False 328
Велосипеды Горные велосипеды False False 4970
Clothing False Истина 9101

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

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

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

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

CustomerID IsCustomerSubtotal State Всего Qty Дата IsDateSubtotal
а FALSE WA 5 7/10/2014
Б FALSE WA 1 7/10/2014
Б FALSE WA 2 7/11/2014
О FALSE ИЛИ 2 7/10/2014
О 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
Б FALSE WA 3 TRUE
О FALSE ИЛИ 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] ) 
)

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

State CustomerId IsCustomerSubtotal Всего Qty Город IsCityStateSubtotal
WA а FALSE 2 Bellevue FALSE
WA Б FALSE 2 Bellevue FALSE
WA а FALSE 3 Редмонд FALSE
WA Б FALSE 1 Редмонд FALSE
ИЛИ О FALSE 3 Портленд FALSE
WA TRUE 4 Bellevue FALSE
WA TRUE 4 Редмонд FALSE
ИЛИ TRUE 3 Портленд FALSE
а FALSE 5 FALSE
Б FALSE 3 TRUE
О FALSE 3 TRUE
TRUE 11 TRUE

СУММИРОВАТЬ