CALCULATE
применяется:вычисляемый столбецвычисляемой таблицыизмерениевизуального вычисления
Вычисляет выражение в измененном контексте фильтра.
Заметка
Есть также функция CALCULATETABLE. Он выполняет точно те же функции, за исключением того, что изменяет контекст фильтра , примененный к выражению, возвращающим объект таблицы .
Синтаксис
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Параметры
Срок | Определение |
---|---|
expression |
Вычисляемого выражения. |
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 можно использовать для применения сложных условий фильтрации, включая те, которые не могут быть определены логическим выражением фильтра.
Функции модификатора фильтра
Функции модификатора фильтров позволяют выполнять больше, чем просто добавлять фильтры. Они предоставляют дополнительный контроль при изменении контекста фильтра.
Функция | Цель |
---|---|
REMOVEFILTERS | Удалите все фильтры или фильтры из одной или нескольких столбцов таблицы или из всех столбцов одной таблицы. |
ALL 1, 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 |
Одежда | $2,117,613,45 | $259,488,37 |
Компоненты | $11,799,076,66 | $803,642.10 |
всего | $ 109,809,274.20 | $ 9602,850,97 |
Функция
Следующее определение меры продаж таблицы создает соотношение продаж по продажам для всех каналов продаж.
Канал | Сумма продаж | Общий канал % выручки |
---|---|---|
Интернет | $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])
)
)
Функция
Следующая Customer таблица вычисляемого столбца классифицирует клиентов в класс лояльности. Это очень простой сценарий: когда доход, полученный клиентом, меньше $ 2500, они классифицируются как Низкий; в противном случае они High.
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
В этом примере контекст строки преобразуется в контекст фильтра. Он называется переходом контекста. Функция
Связанное содержимое
контекст фильтраконтекст строкCALCULATETABLE функцияфункции фильтрации