KEEPFILTERS

применяется:вычисляемый столбецвычисляемой таблицыизмерениевизуального вычисления

Изменяет способ применения фильтров при оценке функции CALCULATE или CALCULATETABLE.

Синтаксис

DAX
KEEPFILTERS(<expression>)  

Параметры

Срок Определение
expression Любое выражение.

Возвращаемое значение

Таблица значений.

Замечания

  • Вы используете KEEPFILTERS в контексте функций CALCULATE и CALCULATETABLE, чтобы переопределить стандартное поведение этих функций.

  • По умолчанию аргументы фильтра в таких функциях, как CALCULATE, используются в качестве контекста для оценки выражения, а такие аргументы фильтра для CALCULATE заменяют все существующие фильтры по тем же столбцам. Новый контекст, затронутый аргументом фильтра для CALCULATE, влияет только на существующие фильтры по столбцам, упомянутым в качестве части аргумента фильтра. Фильтры для столбцов, отличных от упомянутых в аргументах CALCULATE или других связанных функций, остаются в силе и неуправляемы.

  • Функция KEEPFILTERS позволяет изменить это поведение. При использовании KEEPFILTERS все существующие фильтры в текущем контексте сравниваются со столбцами в аргументах фильтра, а пересечение этих аргументов используется в качестве контекста для оценки выражения. Чистый эффект для любого столбца заключается в том, что оба набора аргументов применяются: как аргументы фильтра, используемые в CALCULATE, так и фильтры в аргументах функции KEEPFILTER. Другими словами, в то время как фильтры CALCULATE заменяют текущий контекст, KEEPFILTERS добавляет фильтры в текущий контекст.

  • Эта функция не поддерживается для использования в режиме DirectQuery при использовании в вычисляемых столбцах или правилах безопасности на уровне строк (RLS).

Пример

В следующем примере описаны некоторые распространенные сценарии, демонстрирующие использование функции KEEPFILTERS в рамках формулы CALCULATE или CALCULATETABLE.

Первые три выражения получают простые данные для сравнения:

  • Интернет-продажи для штата Вашингтон.

  • Интернет-продажи для штатов Вашингтон и Орегон (оба штата объединяются).

  • Интернет-продажи для штата Вашингтон и провинции Британская Колумбия (оба региона объединяются).

Четвертое выражение вычисляет интернет-продажи для Вашингтона и Орегона, а фильтр для Вашингтона и Британской Колумбии применяется.

Следующее выражение вычисляет интернет-продажи для Вашингтона и Орегона, но использует KEEPFILTERS; Фильтр для Вашингтона и Британской Колумбии является частью предыдущего контекста.

DAX
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" является фильтром, применяемым при оценке выражения.

функции фильтрации
функция CALCULATE
функции CALCULATETABLE