KEEPFILTERS
применяется:вычисляемый столбец
вычисляемой таблицы
измерение
визуального вычисления
Изменяет способ применения фильтров при оценке функции CALCULATE или CALCULATETABLE.
Синтаксис
KEEPFILTERS(<expression>)
Параметры
Срок | Определение |
---|---|
expression |
Любое выражение. |
Возвращаемое значение
Таблица значений.
Замечания
Вы используете KEEPFILTERS в контексте CALCULATE и CALCULATETABLE функций, чтобы переопределить стандартное поведение этих функций.
По умолчанию аргументы фильтра в таких функциях, как CALCULATE, используются в качестве контекста для оценки выражения, а такие аргументы фильтра для CALCULATE заменить все существующие фильтры по тем же столбцам. Новый контекст, затронутый аргументом фильтра для CALCULATE, влияет только на существующие фильтры по столбцам, упомянутым в качестве части аргумента фильтра. Фильтры для столбцов, отличных от упомянутых в аргументах CALCULATE или других связанных функций, остаются в силе и неуправляемы.
Функция KEEPFILTERS позволяет изменить это поведение. При использовании KEEPFILTERSвсе существующие фильтры в текущем контексте сравниваются со столбцами в аргументах фильтра, а пересечение этих аргументов используется в качестве контекста для оценки выражения. Чистый эффект для любого столбца заключается в том, что оба набора аргументов применяются: как аргументы фильтра, используемые в CALCULATE, так и фильтры в аргументах функции KEEPFILTER. Другими словами, в то время как фильтры CALCULATE заменяют текущий контекст, KEEPFILTERS добавляет фильтры в текущий контекст.
Эта функция не поддерживается для использования в режиме DirectQuery при использовании в вычисляемых столбцах или правилах безопасности на уровне строк (RLS).
Пример
В следующем примере описаны некоторые распространенные сценарии, демонстрирующие использование функции KEEPFILTERS в рамках формулы CALCULATE или CALCULATETABLE.
Первые три выражения получают простые данные для сравнения:
Интернет-продажи для штата Вашингтон.
Интернет-продажи для штатов Вашингтон и Орегон (оба штата объединяются).
Интернет-продажи для штата Вашингтон и провинции Британская Колумбия (оба региона объединяются).
Четвертое выражение вычисляет интернет-продажи для Вашингтона и Орегона, а фильтр для Вашингтона и Британской Колумбии применяется.
Следующее выражение вычисляет интернет-продажи для Вашингтона и Орегона, но использует KEEPFILTERS; Фильтр для Вашингтона и Британской Колумбии является частью предыдущего контекста.
EVALUATE ROW(
"$$ in WA"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
)
, "$$ in WA and OR"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, "$$ in WA and BC"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA and OR ??"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
,'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA !!"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
, KEEPFILTERS('Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
)
Если это выражение вычисляется для примера базы данных AdventureWorks DW, получены следующие результаты.
Столбец | Ценность |
---|---|
[$$ in WA] |
$ 2,467,248,34 |
[$$ in WA and OR] |
$ 3,638,239,88 |
[$$ in WA and BC] |
$ 4,422,588,44 |
[$$ in WA and OR ??] |
$ 3,638,239,88 |
[$$ in WA !!] |
$ 2,467,248,34 |
Заметка
Приведенные выше результаты были отформатированы в таблицу вместо одной строки для образовательных целей.
Сначала изучите выражение, [$$ in WA and OR ??]
. Вы можете задаться вопросом, как эта формула может вернуть значение для продаж в Вашингтоне и Орегоне, так как внешнее CALCULATE выражение включает фильтр для Вашингтона и Британской Колумбии. Ответ заключается в том, что поведение по умолчанию CALCULATE переопределяет внешние фильтры в "Geography"[Государственный код провинции] и заменяет свои собственные аргументы фильтра, так как фильтры применяются к одному столбцу.
Затем изучите выражение, [$$ in WA !!]
. Вы можете задаться вопросом, как эта формула может вернуть значение для продаж в Вашингтоне и ничего другого, так как фильтр аргументов включает Орегон и внешнее выражение CALCULATE включает фильтр в Вашингтоне и Британской Колумбии. Ответ заключается в том, что KEEPFILTERS изменяет поведение CALCULATE по умолчанию и добавляет дополнительный фильтр. Так как используется пересечение фильтров, теперь внешний фильтр 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC")
добавляется в аргумент фильтра 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR"
.. Так как оба фильтра применяются к одному столбцу, результирующий фильтр 'Geography'[State Province Code]="WA"
является фильтром, применяемым при оценке выражения.