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


KEEPFILTERS

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

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

Синтаксис

KEEPFILTERS(<expression>)

Параметры

Срок Определение
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, получены следующие результаты.

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

Функция фильтрации функцийCALCULATECALCULATETABLE функции