Modificar contexto de filtro
Você pode usar o a função CALCULATE
do DAX para modificar o contexto de filtro em suas fórmulas. A sintaxe da função CALCULATE é a seguinte:
CALCULATE(<expression>, [[<filter1>], <filter2>]…)
A função requer a passagem de uma expressão que retorne um valor escalar e tantos filtros quantos forem necessários. A expressão pode ser uma medida (que é uma expressão nomeada) ou qualquer expressão que possa ser avaliada no contexto do filtro.
Os filtros podem ser expressões boolianas ou expressões de tabela. Também é possível passar funções de modificação de filtro que fornecem controle adicional quando você está modificando o contexto de filtro.
Quando você tem vários filtros, eles são avaliados usando o operador lógico AND
, o que significa que todas as condições precisam ser TRUE
ao mesmo tempo.
Observação
A função DAX CALCULATETABLE
executa exatamente a mesma funcionalidade que a função CALCULATE
, exceto pelo fato que ela modifica o contexto de filtro que é aplicado a uma expressão que retorna um objeto de tabela. Neste módulo, as explicações e os exemplos usam a função CALCULATE
, mas tenha em mente que esses cenários também podem se aplicar à função CALCULATETABLE
.
Aplicar filtros de expressão booliana
Um filtro de expressão booliana é uma expressão que é avaliada como TRUE
ou FALSE
. Os filtros boolianos devem obedecer às seguintes regras:
- Elas podem referenciar somente uma coluna.
- Elas não podem referenciar medidas.
- Eles não podem usar funções que verificam ou retornam uma tabela que inclui funções de agregação como
SUM
.
Neste exemplo, você criará uma medida. Primeiro, baixe e abra o arquivo Adventure Works DW 2020 M06.pbix. Em seguida, adicione a medida a seguir na tabela Sales, que filtra a medida Revenue usando um filtro de expressão booliana para produtos vermelhos.
Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")
Adicione a medida Receita de Produto Vermelho ao visual de tabela encontrado na Página 1 do relatório.
Neste próximo exemplo, a medida a seguir filtra a medida Receita por várias cores. Observe o uso do operador IN
seguido de uma lista de valores de cor.
Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})
A medida a seguir filtra a medida Receita por produtos caros. Os produtos caros são aqueles com um preço de lista superior a US$ 1.000.
Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)
Aplicar filtros de expressão de tabela
Um filtro de expressão de tabela aplica um objeto de tabela como um filtro. Ele pode ser uma referência a uma tabela de modelo; no entanto, é provável que uma função DAX retorne um objeto de tabela.
Normalmente, você usará a função FILTER
do DAX para aplicar condições de filtro complexas, incluindo aquelas que não podem ser definidas por uma expressão de filtro booliana. A função FILTER
é considerada uma função de iterador e, portanto, você insere uma tabela ou expressão de tabela, juntamente com uma expressão a ser avaliada para cada linha dessa tabela.
A função FILTER
retorna um objeto de tabela com exatamente a mesma estrutura que a tabela que é inserida. As linhas desse objeto de tabela são um subconjunto dessas linhas que foram inseridas, o que significa as linhas em que a expressão foi avaliada como TRUE
.
O seguinte exemplo mostra uma expressão de filtro de tabela que usa a função FILTER
:
Revenue High Margin Products =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[List Price] > 'Product'[Standard Cost] * 2
)
)
Neste exemplo, a função FILTER
filtra todas as linhas da tabela Product que estão no contexto de filtro. Cada linha de um produto em que o preço de lista excede o dobro de seu custo padrão é exibida como uma linha da tabela filtrada. Portanto, a medida Revenue é avaliada para todos os produtos retornados pela função FILTER
.
Todas as expressões de filtro que são inseridas na função CALCULATE
são expressões de filtro de tabela. Uma expressão de filtro booliana é uma notação abreviada para melhorar a experiência de escrita e leitura. Internamente, o Microsoft Power BI converte expressões de filtro boolianas em expressões de filtro de tabela, que é como ela traduz sua definição de medida de Receita de Produto Vermelho.
Revenue Red =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[Color] = "Red"
)
)
Comportamento do filtro
Dois resultados padrão possíveis ocorrem quando você adiciona expressões de filtro à função CALCULATE
:
- Se as colunas (ou tabelas) não estiverem no contexto de filtro, novos filtros serão adicionados ao contexto de filtro para avaliar a expressão
CALCULATE
. - Se as colunas (ou tabelas) já estiverem no contexto de filtro, os filtros existentes serão substituídos pelos novos para avaliar a expressão
CALCULATE
.
Os exemplos a seguir mostram como funciona a adição de expressões de filtro à função CALCULATE
.
Observação
Em cada um dos exemplos, nenhum filtro é aplicado ao visual de tabela.
Como na atividade anterior, a medida Receita de Produto Vermelho foi adicionada a um visual de tabela que agrupa por região e exibe a receita.
Como nenhum filtro é aplicado na coluna Color na tabela Product, a avaliação da medida adiciona um novo filtro ao contexto de filtro. Na primeira linha, o valor de US$ 2.681.324,79 é para os produtos vermelhos que foram vendidos na região australiana.
Alternar a primeira coluna do visual de tabela de Region para Color produzirá um resultado diferente porque a coluna Color na tabela Product agora está no contexto de filtro.
A fórmula da medida Revenue Red avalia a medida Revenue adicionando um filtro na coluna Color (para vermelho) na tabela Product. Consequentemente, neste visual que agrupa por cor, a fórmula de medida substitui o contexto de filtro por um novo filtro.
Esse resultado pode ou não ser o que você deseja. A próxima unidade apresenta a função KEEPFILTERS
do DAX, que é uma função de modificação de filtro que você pode usar para preservar filtros em vez de substituí-los.