Modificar contexto de filtro

Concluído

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.