Modificar contexto de filtro

Concluído

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.

A captura de tela mostra uma tabela com três colunas: Region, Revenue e Revenue Red. A tabela exibe 10 linhas e um total.

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.

A captura de tela mostra uma tabela com três colunas: Region, Revenue e Revenue Red. A tabela exibe 10 linhas e um total.

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 captura de tela mostra uma tabela com três colunas: Color, Revenue e Revenue Red. A tabela exibe 10 linhas e um total. O valor de Revenue Red é o mesmo para cada linha.

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.