KEEPFILTERS
Область применения: вычисление вычисляемого столбца вычисляемой таблицы Меры визуального элемента
Изменяет способ применения фильтров при оценке функции CALCULATE или CALCULATETABLE.
KEEPFILTERS(<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, получены следующие результаты.
Столбец | Значение |
---|---|
[$$ в WA] | 2 467 248,34 долл. США |
[$$ в WA и OR] | 3 638 239,88 долл. США |
[$$ в WA и BC] | 4 422 588,44 долл. США |
[$$ в WA и OR ??] | 3 638 239,88 долл. США |
[$$ в WA !!] | 2 467 248,34 долл. США |
Примечание
Приведенные выше результаты были отформатированы в таблицу вместо одной строки для образовательных целей.
Во-первых, изучите выражение [$$ в WA и ??]. Вы можете задаться вопросом, как эта формула может вернуть значение для продаж в Вашингтоне и Орегоне, так как внешнее выражение CALCULATE включает фильтр для Вашингтона и Британской Колумбии. Ответ заключается в том, что поведение по умолчанию CALCULATE переопределяет внешние фильтры в "Geography"[государственный код провинции] и заменяет свои собственные аргументы фильтра, так как фильтры применяются к одному столбцу.
Затем изучите выражение [$$ в WA !!]. Вы можете задаться вопросом, как эта формула может вернуть значение для продаж в Вашингтоне и ничего другого, так как фильтр аргументов включает Орегон и внешнее выражение CALCULATE включает фильтр в Вашингтоне и Британской Колумбии. Ответ заключается в том, что KEEPFILTERS изменяет поведение по умолчанию CALCULATE и добавляет дополнительный фильтр. Так как используется пересечение фильтров, теперь внешний фильтр "Geography"[государственный код провинции]="WA" || "Geography"[Государственный код провинции]="BC") добавляется в аргумент фильтра "Geography"[Государственный код провинции]="WA" || 'Geography'[государственный код провинции]="OR",. Так как оба фильтра применяются к одному столбцу, результирующий фильтр Geography[State Province Code]="WA" — это фильтр, применяемый при оценке выражения.