Compartilhar via


KEEPFILTERS

aplica-se a:coluna calculadatabela calculadamedidacálculo visual

Modifica como os filtros são aplicados ao avaliar uma função CALCULATE ou CALCULATETABLE.

Sintaxe

KEEPFILTERS(<expression>)

Parâmetros

Prazo Definição
expression Qualquer expressão.

Valor de retorno

Uma tabela de valores.

Observações

  • Você usa KEEPFILTERS dentro das funções de CALCULATE de contexto e CALCULATETABLE, para substituir o comportamento padrão dessas funções.

  • Por padrão, argumentos de filtro em funções como CALCULATE são usados como o contexto para avaliar a expressão e, como tal, os argumentos de filtro para CALCULATE substituem todos os filtros existentes pelas mesmas colunas. O novo contexto afetado pelo argumento de filtro para CALCULATE afeta apenas filtros existentes em colunas mencionadas como parte do argumento de filtro. Filtros em colunas diferentes daquelas mencionadas nos argumentos de CALCULATE ou outras funções relacionadas permanecem em vigor e sem alteração.

  • A função KEEPFILTERS permite modificar esse comportamento. Quando você usa KEEPFILTERS, todos os filtros existentes no contexto atual são comparados com as colunas nos argumentos de filtro e a interseção desses argumentos é usada como o contexto para avaliar a expressão. O efeito líquido sobre qualquer coluna é que ambos os conjuntos de argumentos se aplicam: os argumentos de filtro usados em CALCULATE e os filtros nos argumentos da função KEEPFILTER. Em outras palavras, enquanto os filtros CALCULATE substituem o contexto atual, KEEPFILTERS adiciona filtros ao contexto atual.

  • Essa função não tem suporte para uso no modo DirectQuery quando usada em colunas calculadas ou regras de RLS (segurança em nível de linha).

Exemplo

O exemplo a seguir leva você a alguns cenários comuns que demonstram o uso da função KEEPFILTERS como parte de uma fórmula de CALCULATE ou CALCULATETABLE.

As três primeiras expressões obtêm dados simples a serem usados para comparações:

  • Vendas pela Internet para o estado de Washington.

  • Vendas pela Internet para os estados de Washington e Oregon (ambos os estados combinados).

  • Vendas pela Internet para o estado de Washington e a província da Colúmbia Britânica (ambas as regiões combinadas).

A quarta expressão calcula as vendas da Internet para Washington e Oregon, enquanto o filtro para Washington e Colúmbia Britânica é aplicado.

A próxima expressão calcula as vendas da Internet para Washington e Oregon, mas usa KEEPFILTERS; o filtro para Washington e Colúmbia Britânica faz parte do contexto anterior.

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"
      )
)

Quando essa expressão é avaliada em relação ao banco de dados de exemplo AdventureWorks DW, os resultados a seguir são obtidos.

Coluna Valor
[$$ in WA] R$ 2.467.248,34
[$$ in WA and OR] R$ 3.638.239,88
[$$ in WA and BC] R$ 4.422.588,44
[$$ in WA and OR ??] R$ 3.638.239,88
[$$ in WA !!] R$ 2.467.248,34

Nota

Os resultados acima foram formatados para uma tabela, em vez de uma única linha, para fins educacionais.

Primeiro, examine a expressão, [$$ in WA and OR ??]. Você pode se perguntar como essa fórmula poderia retornar o valor das vendas em Washington e Oregon, já que a expressão de CALCULATE externa inclui um filtro para Washington e Colúmbia Britânica. A resposta é que o comportamento padrão de CALCULATE substitui os filtros externos em 'Geography'[State Province Code] e substitui seus próprios argumentos de filtro, pois os filtros se aplicam à mesma coluna.

Em seguida, examine a expressão, [$$ in WA !!]. Você pode se perguntar como essa fórmula poderia retornar o valor das vendas em Washington e nada mais, já que o filtro de argumento inclui Oregon e a expressão de CALCULATE externa inclui um filtro em Washington e na Colúmbia Britânica. A resposta é que KEEPFILTERS modifica o comportamento padrão de CALCULATE e adiciona um filtro adicional. Como a interseção de filtros é usada, agora o filtro externo 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC") é adicionado ao argumento de filtro 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR",. Como ambos os filtros se aplicam à mesma coluna, o filtro resultante 'Geography'[State Province Code]="WA" é o filtro aplicado ao avaliar a expressão.

Funções de filtro de função