CALCULATE
aplica-se a:coluna calculadatabela calculadaMeasurecálculo visual
Avalia uma expressão em um contexto de filter modificado.
Nota
Há também a função CALCULATETABLE. Ele executa exatamente a mesma funcionalidade, except modifica o contexto filter aplicado a uma expressão que retorna um objeto de tabela .
Sintaxe
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parâmetros
Prazo | Definição |
---|---|
expression |
A expressão a ser avaliada. |
filter1, filter2,… |
(Opcional) Expressões boolianas or expressões de tabela que definem filters, orfilter funções modificadoras. |
A expressão usada como parâmetro first é essencialmente a mesma que um measure.
Filters pode ser:
- Expressões de filter boolianas
- Expressões de filter de tabela
- Filter funções de modificação
Quando há vários filters, eles podem ser avaliados usando a AND (&&
) operador lógico, o que significa que all condições devem ser TRUE
, or pelo operador lógico OR (||
), o que significa que qualquer condição pode ser true.
Expressões de filter boolianas
Uma expressão booliana filter é uma expressão que é avaliada como TRUE
orFALSE
. Há várias regras que elas devem cumprir:
- Eles podem fazer referência a colunas de uma única tabela.
- Eles não podem referenciar medidas.
- Eles não podem usar uma função de CALCULATE aninhada.
A partir da versão de setembro de 2021 do Power BI Desktop, o seguinte também se aplica:
- Eles não podem usar funções que verificam or retornam uma tabela, a menos que sejam passadas como argumentos para funções de agregação.
- Eles podem conter uma função de agregação que retorna um valueescalar. Por exemplo
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Expressão filter de tabela
Uma expressão de tabela filter aplica um objeto de tabela como um filter. Pode ser uma referência a uma tabela de modelo, mas é mais provável que seja uma função que retorna um objeto de tabela. Você pode usar a função FILTER para aplicar condições filter complexas, incluindo aquelas que não podem ser definidas por uma expressão booliana filter.
Filter funções modificadoras
Filter funções modificadoras permitem que você faça mais do que simplesmente adicionar filters. Eles fornecem controle adicional ao modificar filter contexto.
Função | Propósito |
---|---|
REMOVEFILTERS | Remova allfilters, orfilters de uma or mais colunas de uma tabela, or de all colunas de uma única tabela. |
ALL 1, ALLEXCEPT, ALLNOBLANKROW | Remova filters de uma or mais colunas, or de colunas all de uma única tabela. |
KEEPFILTERS | Adicione filter sem remover filters existentes nas mesmas colunas. |
USERELATIONSHIP | Envolva uma relação inativa entre colunas de related, caso em que a relação ativa ficará automaticamente inativa. |
CROSSFILTER | Modificar filter direção (de ambos para único, or de único para ambos) or desabilitar uma relação. |
1 A função ALLand suas variantes se comportam como modificadores filterand como funções que retornam objetos de tabela. If a função REMOVEFILTERS é compatível com sua ferramenta, é melhor usá-la para remover filters.
Retornar value
O value que é o resultado da expressão.
Observações
Quando filter expressões são fornecidas, a função CALCULATE modifica o contexto filter para evaluate a expressão. Para cada expressão filter, há dois resultados padrão possíveis quando a expressão filter é not encapsulada na função KEEPFILTERS:
- If as colunas (or tabelas) não estiverem no contexto filter, o novo filters será adicionado ao contexto filter para evaluate a expressão.
- If as colunas (tabelasor) já estiverem no contexto filter, o filters existente será substituído pelo novo filters para evaluate a expressão CALCULATE.
A função CALCULATE usada sem filters atinge um requisito específico. Ele faz a transição do contexto de linha para filter contexto. É necessário quando uma expressão (not um modelo measure) que resume os dados do modelo precisa ser avaliada no contexto de linha. Esse cenário pode ocorrer em uma fórmula de coluna calculada or quando uma expressão em uma função iterador é avaliada. Observe que quando um modelo measure é usado no contexto de linha, a transição de contexto é automática.
Essa função not tem suporte para uso no modo DirectQuery quando usada em colunas calculadas or regras de RLS (segurança em nível de linha).
Exemplos
A tabela Sales a seguir measure definição produz um resultado de receita, mas apenas para produtos que têm a cor azul.
Exemplos neste artigo podem ser usados com o modelo sample Adventure Works DW 2020 Power BI Desktop. Para obter o modelo, consulte DAXsample modelo.
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
Categoria | Valor de Vendas | Receita Azul |
---|---|---|
Acessórios | $1.272.057,89 | $165.406,62 |
Bicicletas | $94.620.526,21 | $8.374.313,88 |
Roupa | $2.117.613,45 | $259.488,37 |
Componentes | $11.799.076,66 | US$ 803.642,10 |
Total de | US$ 109.809.274,20 | US$ 9.602.850,97 |
A função CALCULATE avalia o sum da tabela SalesSales Amount coluna em um contexto de filter modificado. Uma nova filter é adicionada à tabela Productcoluna Color,or, a filter substitui qualquer filter já aplicada à coluna.
A seguinte tabela Salesmeasure definição produz uma proporção de vendas em relação às vendas para canais de vendas all.
Canal | Valor de Vendas | Receita % Canal Total |
---|---|---|
Internet | $29.358.677,22 | 26.74% |
Revendedor | US$ 80.450.596,98 | 73.26% |
Total de | 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 SalesSales Amount coluna value (no contexto filter) pela mesma expressão em um contexto de filter modificado. É a função CALCULATE que modifica o contexto filter usando a função REMOVEFILTERS, que é uma função modificadora filter. Ele remove filters da tabela Sales Orderchannel coluna.
A seguinte definição de coluna calculada da tabela Customer classifica os clientes em uma classe de fidelidade. É um cenário muito simples: quando a receita produzida pelo cliente é inferior a US$ 2.500, ela é classificada como Baixa; caso contrário, eles são 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 filter. É conhecido comode transição de contexto
Related conteúdo
Filter contextofunção deCALCULATETABLE de contexto de linhaFilter funções