KEEPFILTERS
Изменяет порядок применения фильтров при вычислении функции CALCULATE или CALCULATETABLE.
Синтаксис
KEEPFILTERS(<expression>)
Параметры
Термин | Определение |
---|---|
expression | Любое выражение. |
Возвращаемое значение
Таблица значений.
Remarks
Функцию 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'[State Province Code] и заменяет собственные аргументы фильтра, поскольку фильтры применяются к одному и тому же столбцу.
Затем изучите выражение [$$ in WA !!] . Может возникнуть вопрос, как эта формула может возвращать значение продаж только в штате Вашингтон, когда аргумент фильтра включает штат Орегон, а внешнее выражение CALCULATE включает фильтр для штата Вашингтон и провинции Британская Колумбия. Ответ заключается в том, что функция KEEPFILTERS изменяет стандартное поведение функции CALCULATE и добавляет дополнительный фильтр. Поскольку используется пересечение фильтров, в аргумент фильтра 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR" добавляется внешний фильтр 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC") . Поскольку оба фильтра применяются к одному и тому же столбцу, результирующий фильтр 'Geography'[State Province Code]="WA" — это фильтр, применяемый при вычислении выражения.
См. также раздел
Функции фильтрации
CALCULATE, функция
Функция CALCULATETABLE