CALCULATE

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

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

Заметка

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

Синтаксис

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

Параметры

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

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

Фильтры могут быть следующими:

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

При использовании нескольких фильтров их можно оценить с помощью AND логического оператора (&&), что означает, что все условия должны быть TRUE, или OR логическим оператором (||), что означает, что любое условие может быть истинным. Дополнительные сведения см. в разделе DAX операторов > логических операторов.

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

Логический фильтр выражений — это выражение, которое оценивается как TRUE или FALSE. Он должен соответствовать нескольким правилам:

  • Он может ссылаться на столбцы из одной таблицы.

  • Не удается ссылаться на меры.

  • Она не может использовать вложенную CALCULATE функцию.

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

  • Она может содержать функцию агрегирования, которая возвращает скалярное значение. Рассмотрим пример.

    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

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

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

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

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

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

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

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

Значение, которое приводит к выражению.

Замечания

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

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

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

Примеры

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

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

Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
Категория Сумма продаж Синий доход
Принадлежности $1,272,057,89 $165,406,62
Велосипеды $94,620,526.21 $8,374,313,88
Одежда $2,117,613,45 $259,488,37
Компоненты $11,799,076,66 $803,642.10
всего $ 109,809,274.20 $ 9602,850,97

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

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

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
Канал Сумма продаж Общий канал % выручки
Интернет $29,358,677,22 26.74%
Перекупщик $80,450,596,98 73.26%
всего $ 109,809,274.20 100.00%

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

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

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
Сегмент клиента Число клиентов Сумма продаж
Высоко 4,637 $102,670,663.09
Низко 13,848 $7,138,611.11
всего 18,485 $ 109,809,274.20

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