CALCULATE
Aplica-se a:Coluna calculadaTabela calculadaMedidaCálculo visual
Avalia uma expressão em um contexto de filtro modificado.
Observação
Também há a função CALCULATETABLE. Ela executa exatamente a mesma funcionalidade, exceto que modifica o contexto de filtro aplicado a uma expressão que retorna um objeto de tabela.
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Termo | Definição |
---|---|
expressão | Expressão a ser avaliada. |
filter1, filter2,… | (Opcional) Expressões boolianas ou expressões de tabela que definem filtros ou funções de modificador de filtro. |
A expressão usada como o primeiro parâmetro é essencialmente a mesma que uma medida.
Os filtros podem ser:
- Expressões de filtro booliano
- Expressões de filtro de tabela
- Funções de modificação de filtro
Quando há vários filtros, eles podem ser avaliados usando o operador lógico AND (&&), o que significa que todas as condições devem ser verdadeiras ou pelo operador lógico OR (| |), o que significa que qualquer condição pode ser verdadeira.
Um filtro de expressão booliana é uma expressão que é avaliada como TRUE ou FALSE. Há várias regras que elas devem cumprir:
- Elas podem referenciar colunas de uma única tabela.
- Elas não podem referenciar medidas.
- Elas não podem usar uma função CALCULATE aninhada.
Da versão de setembro de 2021 do Power BI Desktop em diante, o seguinte também se aplica:
- Elas não podem usar funções que examinam ou retornam uma tabela, a menos que sejam passadas como argumentos para funções de agregação.
- Elas podem conter uma função de agregação que retorna um valor escalar. Por exemplo, DAX
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Um filtro de expressão de tabela aplica um objeto de tabela como um filtro. Pode ser uma referência a uma tabela de modelo, mas é mais provável que seja uma função que retorne um objeto de tabela. Você pode usar a função FILTER para aplicar condições de filtro complexas, incluindo aquelas que não podem ser definidas por uma expressão de filtro booliana.
As funções de modificador de filtro permitem que você faça mais do que simplesmente adicionar filtros. Elas fornecem controle adicional ao modificar o contexto do filtro.
Função | Finalidade |
---|---|
REMOVEFILTERS | Remover todos os filtros ou os filtros de uma ou mais colunas de uma tabela ou de todas as colunas de uma tabela. |
ALL1, ALLEXCEPT, ALLNOBLANKROW | Remover filtros de uma ou mais colunas ou de todas as colunas de uma tabela. |
KEEPFILTERS | Adicionar filtro sem remover filtros existentes nas mesmas colunas. |
USERELATIONSHIP | Envolver uma relação inativa entre as colunas relacionadas, caso em que a relação ativa se tornará inativa automaticamente. |
CROSSFILTER | Modificar a direção do filtro (de ambos para único ou de um para ambos) ou desabilitar uma relação. |
1 A função ALL e suas variantes se comportam como modificadores de filtro e como funções que retornam objetos de tabela. Se houver suporte para a função REMOVEFILTERS na sua ferramenta, será melhor usá-la para remover filtros.
O valor que é o resultado da expressão.
Quando expressões de filtro são fornecidas, a função CALCULATE modifica o contexto do filtro para avaliar a expressão. Para cada expressão de filtro, há dois resultados padrão possíveis quando a expressão de filtro não é encapsulada na função KEEPFILTERS:
- 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.
- 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.
A função CALCULATE usada sem filtros atinge um requisito específico. Ela faz a transição do contexto de linha para o contexto de filtro. É necessário quando uma expressão (não uma medida de modelo) que resume os dados de modelo precisa ser avaliada no contexto da linha. Esse cenário pode ocorrer em uma fórmula de coluna calculada ou quando uma expressão em uma função de iterador é avaliada. Observe que, quando uma medida de modelo é usada no contexto de linha, a transição de contexto é automática.
Não há suporte para a função ser usada no modo DirectQuery quando usada em regras RLS (segurança em nível de linha) ou colunas calculadas.
A definição de medida da tabela Vendas a seguir produz um resultado de receita, mas apenas para produtos que têm a cor azul.
Os exemplos deste artigo podem ser usados com o modelo de exemplo do Power BI Desktop do Adventure Works DW 2020. Para obter o modelo, confira Modelo de exemplo DAX.
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
Categoria | Valor das Vendas | Receita azul |
---|---|---|
Acessórios | US$ 1.272.057,89 | US$ 165.406,62 |
Bikes | US$ 94.620.526,21 | US$ 8.374.313,88 |
Clothing | US$ 2.117.613,45 | US$ 259.488,37 |
Componentes | $11,799,076.66 | US$ 803.642,10 |
Total | US$ 109.809.274,20 | US$ 9.602.850,97 |
A função CALCULATE avalia a soma da tabela Vendas, coluna Valor de vendas, em um contexto de filtro modificado. Um novo filtro é adicionado à tabela Product, coluna Color, ou o filtro substitui qualquer filtro que já esteja aplicado à coluna.
A definição de medida da tabela Vendas a seguir produz uma taxa de vendas sobre vendas para todos os canais de vendas.
Canal | Valor das Vendas | % de receita total do canal |
---|---|---|
Internet | $29,358,677.22 | 26,74% |
Reseller | $80,450,596.98 | 73,26% |
Total | US$ 109.809.274,20 | 100,00% |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
A função DIVIDE divide uma expressão que soma a tabela Vendas, coluna Valor das Vendas (no contexto de filtro), pela mesma expressão em um contexto de filtro modificado. É a função CALCULATE que modifica o contexto de filtro usando a função REMOVEFILTERS, que é uma função de modificador de filtro. Ela remove filtros da tabela Sales Order, coluna Channel.
A definição de coluna calculada da tabela Customer a seguir classifica os clientes em uma classe de fidelidade. É um cenário muito simples: Quando a receita produzida pelo cliente é menor que US$ 2.500, é classificada como baixa; caso contrário, é alta.
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
Neste exemplo, o contexto de linha é convertido no contexto de filtro. Isso é conhecido como transição de contexto. A função ALLEXCEPT remove filtros de todas as colunas da tabela Customer, exceto a coluna CustomerKey.
Contexto de filtro
Contexto de linha
função CALCULATETABLE
Funções de filtro