CALCULATE

Вычисляет выражение в измененном контексте фильтра.

Примечание

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

Синтаксис

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Параметры

Термин Определение
expression Вычисляемое выражение.
filter1, filter2,… (Необязательно) Логические выражения или табличные выражения, определяющие фильтры или функции модификаторов фильтра.

Выражение, используемое в качестве первого параметра, по сути является тем же, что и мера.

Фильтры могут быть:

  • выражениями логического фильтра;
  • выражениями фильтра таблицы.
  • Функции изменения фильтра

При наличии множества фильтров они могут применяться с использованием логического оператора "И" (&&), то есть все условия должны выполняться (TRUE), либо логического оператора "ИЛИ" (||), при котором достаточно выполнения любого из условий.

Выражения логического фильтра

Фильтр логического выражения — это выражение, результатом которого является значение TRUE или FALSE. Существует несколько правил, которые они должны соблюдать:

  • Они могут ссылаться на столбцы из одной таблицы.
  • Они не могут ссылаться на меры.
  • Выражение не может использовать вложенную функцию CALCULATE.

Начиная с выпуска Power BI Desktop за сентябрь 2021 г. применяется также следующее:

  • Они не могут использовать функции, которые сканируют или возвращают таблицу, если только они не передаются как аргументы в функции агрегирования.
  • Они могут содержать функцию агрегирования, возвращающую скалярное значение. Например,
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Выражение фильтра таблицы

Фильтр табличных выражений применяет объект таблицы в качестве фильтра. Это может быть ссылка на таблицу модели, но, скорее всего, это функция, возвращающая объект таблицы. Функцию FILTER можно использовать для применения сложных условий фильтра, включая те, которые не могут быть определены логическим выражением фильтра.

Функции модификатора фильтра

Функции модификатора фильтра позволяют не только добавлять фильтры. Они предоставляют дополнительный контроль при изменении контекста фильтра.

Функция Назначение
REMOVEFILTERS Удаление всех фильтров или фильтров из одного или нескольких столбцов таблицы или из всех столбцов одной таблицы.
ALL1, ALLEXCEPT, ALLNOBLANKROW Удаление фильтров из одного или нескольких столбцов или из всех столбцов одной таблицы.
KEEPFILTERS Добавление фильтра без удаления существующих фильтров для тех же столбцов.
USERELATIONSHIP Вызов неактивной связи между связанными столбцами. В этом случае активная связь автоматически становится неактивной.
CROSSFILTER Изменение направления фильтра (от обоих до одного и от одного до обоих) или отключение связи.

1 Функция ALL и ее варианты ведут себя как модификаторы фильтров и как функции, возвращающие объекты таблицы. Если функция REMOVEFILTERS поддерживается вашим средством, лучше использовать ее для удаления фильтров.

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

Значение, которое является результатом выражения.

Remarks

  • При указании выражений фильтра функция CALCULATE изменяет контекст фильтра для вычисления выражения. Для каждого критерия фильтра существует два возможных стандартных результата, если выражение фильтра не заключено в функцию KEEPFILTERS:

    • Если столбцы (или таблицы) не находятся в контексте фильтра, то новые фильтры будут добавлены в контекст фильтра для вычисления выражения.
    • Если столбцы (или таблицы) уже находятся в контексте фильтра, существующие фильтры будут перезаписаны новыми фильтрами для вычисления выражения CALCULATE.
  • Функция CALCULATE, используемая без фильтров, позволяет добиться определенного требования. Она переводит контекст строки в контекст фильтра. Она необходима, если выражение (не мера модели), которое суммирует данные модели, необходимо вычислить в контексте строки. Этот сценарий может возникнуть в формуле вычисляемого столбца или при вычислении выражения в функции-итераторе. Обратите внимание, что если мера модели используется в контексте строки, переход контекста выполняется автоматически.

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

Примеры

Следующее определение меры таблицы Sales выдает результат дохода, но только для продуктов с синим цветом.

Примеры в этой статье можно использовать с примером модели Adventure Works DW 2020 Power BI Desktop. Чтобы получить модель, воспользуйтесь образцом модели DAX.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Категория Объем продаж Синий доход
Accessories 1 272 057,89 долл. США 165 406,62 долл. США
Bikes 94 620 526,21 долл. США 8 374 313,88 долл. США
Clothing 2 117 613,45 долл. США 259 488,37 долл. США
Компоненты $ 11 799 076,66 803 642,10 долл. США
Всего 109 809 274,20 долл. США 9 602 850,97 долл. США

Функция CALCULATE вычисляет сумму по столбцу Sales Amount таблицы Sales в измененном контексте фильтра. Новый фильтр добавляется в столбец Color таблицы Product — или фильтр перезаписывает любой фильтр, уже примененный к столбцу.

Следующее определение меры таблицы Sales дает отношение продаж по продажам для всех каналов продаж.

Канал Объем продаж % дохода всего канала
Интернет 29 358 677,22 $ 26,74 %
Reseller $ 80 450 596,98 73,26 %
Всего 109 809 274,20 долл. США 100,00 %
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

Функция DIVIDE делит выражение, которое суммирует сумму значений столбце Sales Amount таблицы Sales (в контексте фильтра), на то же выражение в измененном контексте фильтра. Функция CALCULATE изменяет контекст фильтра с помощью функции REMOVEFILTERS, которая является функцией-модификатором фильтра. Она удаляет фильтры из столбца Канал таблицы Заказы.

Следующее определение вычисленного столбца таблицы Customer классифицирует клиентов по классу лояльности. Это очень простой сценарий. Когда размер дохода, полученного от клиента, составляет менее 2500 долл. США, он классифицируется как Low; в противном случае — High.

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

В этом примере контекст строки преобразуется в контекст фильтра. Это называется переходом контекста. Функция ALLEXCEPT удаляет фильтры из всех столбцов таблицы Customer, за исключением столбца CustomerKey.

См. также

Контекст фильтра
Контекст строки
Функция CALCULATETABLE
Функции фильтрации