CALCULATE

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

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

Примечание

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

Синтаксис

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

Параметры

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

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

Filters может быть:

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

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

Логические выражения filter

Логическое выражение filter — это выражение, которое оценивается как TRUEorFALSE. Существует несколько правил, которые они должны соблюдать:

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

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

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

Выражение табличного filter

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

функции модификатора Filter

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

Функция Цель
REMOVEFILTERS Удалите allfilters, orfilters из одной or больше столбцов таблицы, or из all столбцов одной таблицы.
ALL 1, ALLEXCEPT, ALLNOBLANKROW Удалите filters из одного or больше столбцов, or из all столбцов одной таблицы.
KEEPFILTERS Добавьте filter без удаления существующих filters в одних столбцах.
USERELATIONSHIP Включение неактивной связи между столбцами related, в этом случае активная связь автоматически станет неактивной.
CROSSFILTER Измените направление filter (от обоих до одного, or из одного в оба) or отключить связь.

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

Возврат value

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

Замечания

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

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

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

Примеры

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

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

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

Функция CALCULATE оценивает sum таблицы SalesSales Amount в измененном контексте filter. В таблицу Product добавляется новый filter столбец color—or, filter перезаписывает все filter, которые уже применены к столбцу.

В следующей таблице Salesmeasure определение создает соотношение продаж по продажам за all каналов продаж.

Канал Сумма продаж Общий канал % выручки
Интернет $29,358,677,22 26.74%
Перекупщик $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столбца Sales Amountvalue (в контексте filter) на то же выражение в измененном контексте filter. Это функция CALCULATE, которая изменяет контекст filter с помощью функции REMOVEFILTERS, которая является функцией модификатора filter. Он удаляет из таблицы заказа на продажу канала .

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

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

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

контекста
контекст строки
CALCULATETABLE функции
функции Filter