Modificar o contexto de filtro

Concluído

Pode utilizar a função DAX para modificar o CALCULATE contexto de filtro nas suas fórmulas. A sintaxe da função CALCULATE é a seguinte:

CALCULATE(<expression>, [[<filter1>], <filter2>]…)

A função exige a transmissão de uma expressão que apresente 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 booleanas ou expressões de tabela. Também é possível transmitir funções de modificação de filtros que fornecem controlo adicional quando está a modificar o contexto de filtro.

Quando tem vários filtros, estes são avaliados através do operador lógico, o AND que significa que todas as condições têm de estar TRUE ao mesmo tempo.

Nota

A CALCULATETABLE função DAX executa exatamente a mesma funcionalidade que a CALCULATE função, exceto que modifica o contexto de filtro aplicado a uma expressão que devolve um objeto de tabela. Neste módulo, as explicações e exemplos utilizam a CALCULATE função, mas tenha em atenção que estes cenários também podem ser aplicados à CALCULATETABLE função.

Aplicar filtros de expressão booleana

Um filtro de expressão booleana é uma expressão que avalia como TRUE ou FALSE. Os filtros booleanos têm de obedecer às seguintes regras:

  • Podem fazer referência apenas a uma única coluna.
  • Não podem fazer referência a medidas.
  • Não podem utilizar funções que analisam ou devolvem uma tabela que inclua funções de agregação como SUM.

Neste exemplo, criará uma medida. Primeiro, transfira e abra o ficheiro Adventure Works DW 2020 M06.pbix. Em seguida, adicione a seguinte medida à tabela Vendas que filtra a medida Receita com um filtro de expressão booleana para produtos vermelhos.

Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")

Adicione a medida Receita a Vermelho ao elemento visual de tabela que se encontra na Página 1 do relatório.

No próximo exemplo, a medida seguinte filtra a medida Receita por várias cores. Repare na utilização do IN operador seguida de uma lista de valores de cor.

Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})

A medida seguinte filtra a medida Receita por produtos caros. Os produtos caros são aqueles que têm um preço de tabela superior a 1000 USD.

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. Poderia ser uma referência a uma tabela de modelo. No entanto, é provável que uma função DAX apresente um objeto de tabela.

Normalmente, irá utilizar a FILTER função DAX para aplicar condições de filtro complexas, incluindo as que não podem ser definidas por uma expressão de filtro booleano. A FILTER função é classificada como uma função de iterador e, por isso, transmitiria uma tabela ou expressão de tabela e uma expressão para avaliar para cada linha dessa tabela.

A FILTER função devolve um objeto de tabela com exatamente a mesma estrutura que a tabela transmitida. As linhas são um subconjunto dessas linhas que foram transmitidas, o que significa que as linhas em que a expressão foi avaliada como TRUE.

O exemplo seguinte mostra uma expressão de filtro de tabela que utiliza a FILTER função:

Revenue High Margin Products =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[List Price] > 'Product'[Standard Cost] * 2
    )
)

Neste exemplo, a FILTER função filtra todas as linhas da tabela Produto que estão no contexto de filtro. Cada linha de um produto em que o preço de tabela excede o dobro do seu custo padrão é mostrada como uma linha da tabela filtrada. Por conseguinte, a medida Receita é avaliada para todos os produtos devolvidos pela FILTER função.

Todas as expressões de filtro que são transmitidas à CALCULATE função são expressões de filtro de tabela. Uma expressão de filtro booleana é uma notação abreviada para melhorar a experiência de escrita e leitura. Internamente, o Microsoft Power BI converte expressões booleanas de filtro em expressões de tabela de filtro, que é como converte a definição da medida Receita a Vermelho.

Revenue Red =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[Color] = "Red"
    )
)

Comportamento do filtro

Dois possíveis resultados padrão ocorrem quando adiciona expressões de filtro à CALCULATE função:

  • Se as colunas (ou tabelas) não estiverem no contexto de filtro, serão adicionados novos filtros ao contexto de filtro para avaliar a CALCULATE expressão.
  • Se as colunas (ou tabelas) já estiverem no contexto de filtro, os filtros existentes serão substituídos pelos novos filtros para avaliar a CALCULATE expressão.

Os exemplos seguintes mostram como funciona a adição de expressões de filtro à CALCULATE função.

Nota

Em todos os exemplos, nenhum filtro é aplicado ao elemento visual de tabela.

À semelhança da atividade anterior, a medida Receita a Vermelho foi adicionada a um elemento visual de tabela que agrupa por região e mostra a receita.

Uma vez que não é aplicado nenhum filtro na coluna Cor na tabela Produto , a avaliação da medida adiciona um novo filtro ao contexto de filtro. Na primeira linha, o valor de 2 681 324,79 $ é referente aos produtos a vermelho que foram vendidos na região australiana.

Mudar a primeira coluna do elemento visual de tabela de Região para Cor produzirá um resultado diferente porque a coluna Cor na tabela Produto está agora no contexto de filtro.

A fórmula de medida Receita Vermelha avalia a medida Receita ao adicionar um filtro na coluna Cor (a vermelho) na tabela Produto . Consequentemente, neste elemento visual que agrupa por cor, a fórmula da medida substitui o contexto de filtro por um novo filtro.

Este resultado poderá ser ou não o pretendido. A unidade seguinte apresenta a KEEPFILTERS função DAX, que é uma função de modificação de filtro que pode utilizar para preservar filtros em vez de substituí-los.