Modificar contexto de filtro
Você pode usar a função CALCULATE 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 de filtro.
Os filtros podem ser expressões boolianas ou expressões de tabela. Também é possível transmitir funções de modificação de filtro que fornecem mais controle 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 devem ser TRUE ao mesmo tempo.
Observação
A função CALCULATETABLE tem a mesma funcionalidade que a função CALCULATE, com a diferença de que ela modifica o contexto de filtro aplicado a uma expressão que retorna um objeto de tabela. Neste módulo, as explicações e exemplos usam a função CALCULATE, mas lembre-se de 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 avaliada como TRUE ou FALSE. Os filtros boolianos devem obedecer às seguintes regras:
- Eles podem fazer referência apenas a uma coluna.
- Eles não podem fazer referência a medidas.
- Eles não podem usar funções que verificam ou retornam uma tabela que inclua funções de agregação como
SUM.
Para executar as tarefas neste exemplo, baixe e abra o arquivo Adventure Works DW 2020 M06.pbix. Em seguida, adicione a medida a seguir à 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 Revenue Red ao visual de tabela encontrado na Página 1 do relatório.
Neste próximo exemplo, a medida a seguir filtra a medida Revenue 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 Revenue por produtos caros. Produtos caros são aqueles com um preço de tabela superior a 1.000 dólares americanos.
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.
Geralmente, a função FILTER é usada para aplicar condições de filtro complexas, incluindo aquelas que não podem ser definidas por uma expressão de filtro booliano. A função FILTER é classificada como uma função de iterador e, portanto, você passaria uma tabela, ou expressão de tabela, e uma expressão para avaliar para cada linha dessa tabela.
A função FILTER retorna um objeto de tabela com exatamente a mesma estrutura daquele que foi passado para a tabela. As linhas desse objeto de tabela são um subconjunto dessas linhas que foram passadas, as linhas nas quais a expressão foi avaliada como TRUE.
O exemplo a seguir 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 passadas para a função CALCULATE são expressões de filtro de tabela. Uma expressão de filtro booliano é uma notação abreviada para melhorar a experiência de escrita e leitura. Internamente, o Microsoft Power BI converte expressões de filtro booliano em expressões de filtro de tabela, que é como ele converte a definição da medida Revenue Red.
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 filtros 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 Revenue Red foi adicionada a um visual de tabela que agrupa por região e exibe a receita.
Como nenhum filtro é aplicado à coluna Color da 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 produz um resultado diferente, pois 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 à coluna Color (para vermelho) na tabela Product. Nesse visual que agrupa por cor, a fórmula da 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, que é uma função de modificação de filtro que pode ser usada para preservar filtros em vez de substituí-los.