Поделиться через


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

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