Modificar o contexto de filtro
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.