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