CALCULATE

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

Примечание.

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

Синтаксис

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

Параметры

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

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

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

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

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

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

Фильтр логического выражения — это выражение, результатом которого является значение 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 можно использовать для применения сложных условий фильтра, включая те, которые не могут быть определены логическим выражением фильтра.

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

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

Function Характер использования
REMOVEFILTERS Удалите все фильтры или фильтры из одной или нескольких столбцов таблицы или из всех столбцов одной таблицы.
ALL1, ALLEXCEPT, ALLNOBLANKROW Удалите фильтры из одного или нескольких столбцов или из всех столбцов одной таблицы.
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
Clothing $2,117,613,45 $259,488,37
Компоненты $ 11 799 076,66 $803,642.10
Всего $109,809,274,20 $9602,850,97

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

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

Канал Сумма продаж Доход % всего канала
Интернет 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 table Sales Amount (в контексте фильтра) на то же выражение в измененном контексте фильтра. Это функция CALCULATE, которая изменяет контекст фильтра с помощью функции REMOVEFILTERS, которая является функцией модификатора фильтра. Он удаляет фильтры из столбца "Канал заказа на продажу".

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

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

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

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