KEEPFILTERS

Modifica o modo como os filtros são aplicados durante a avaliação de uma função CALCULATE ou CALCULATETABLE.

Sintaxe

KEEPFILTERS(<expression>)  

Parâmetros

Termo Definição
expression Qualquer expressão.

Valor devolvido

Uma tabela de valores.

Observações

  • Utilize a função KEEPFILTERS no contexto das funções CALCULATE e CALCULATETABLE para substituir o comportamento padrão dessas funções.

  • Por predefinição, os argumentos de filtro s em funções como CALCULATE são utilizados como contexto para avaliar a expressão e, como tal, esses argumentos de filtro para CALCULATE substituem todos os filtros existentes nas mesmas colunas. O novo contexto efetivado pelo argumento de filtro para CALCULATE afeta apenas os filtros existentes em colunas mencionadas como parte do argumento de filtro. Os filtros em colunas diferentes daquelas mencionadas nos argumentos de CALCULATE ou noutras funções relacionadas permanecem em vigor e inalterados.

  • A função KEEPFILTERS permite que modifique este comportamento. Quando utiliza KEEPFILTERS, todos os filtros existentes no contexto atual são comparados com as colunas nos argumentos de filtro e a interseção desses argumentos é utilizada como contexto para avaliar a expressão. O efeito líquido em qualquer uma das colunas é que ambos os conjuntos de argumentos se aplicam: tanto os argumentos de filtro utilizados em CALCULATE como os filtros nos argumentos da função KEEPFILTER. Por outras palavras, enquanto os filtros CALCULATE substituem o contexto atual, KEEPFILTERS adiciona filtros ao contexto atual.

  • Esta função não é suportada para ser utilizada no modo DirectQuery quando é utilizada em colunas calculadas ou regras de segurança ao nível d alinha (RLS).

Exemplo

O exemplo a seguir apresenta-lhe alguns cenários comuns que demonstram a utilização da função KEEPFILTERS como parte de uma fórmula CALCULATE ou CALCULATETABLE.

As três primeiras expressões obtêm dados simples a serem utilizados 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 província da Colúmbia Britânica (ambas as regiões combinadas).

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

A expressão seguinte calcula as Vendas pela Internet para Washington e Oregon, mas utiliza 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 esta expressão é avaliada de acordo com a base de dados de exemplo da AdventureWorks DW, são obtidos os seguintes resultados.

Coluna Valor
[$$ 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

Nota

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

Primeiro, analise a expressão [$$ in WA e OR ??] . Pode perguntar-se como é que esta fórmula poderia devolver o valor de vendas em Washington e Oregon, já que a expressão CALCULATE externa inclui um filtro para Washington e Colúmbia Britânica. A resposta deve-se ao facto de o comportamento predefinido de CALCULATE substituir os filtros externos em 'Geography'[State Province Code] e substituir os seus próprios argumentos de filtro, porque os filtros se aplicam à mesma coluna.

Em seguida, analise a expressão [$$ in WA !!] . Pode perguntar-se como é que esta fórmula poderia devolver o valor de vendas em Washington e mais nada, uma vez que o filtro de argumento inclui Oregon e a expressão CALCULATE externa inclui um filtro para Washington e Colúmbia Britânica. A resposta deve-se ao facto de KEEPFILTERS modificar o comportamento predefinido de CALCULATE e adicionar um filtro adicional. Uma vez que a interseção dos filtros é utilizada, 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 que é aplicado ao avaliar a expressão.

Veja também

Funções de filtro
Função CALCULATE
Função CALCULATETABLE