Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
Coluna calculada
Tabela calculada
Medida
Cálculo visual
Avalia uma expressão em um contexto de filtro modificado.
Observação
Há também a função CALCULATETABLE. Ele executa exatamente a mesma funcionalidade, exceto que modifica o contexto de filtro aplicado a uma expressão que retorna um objeto de tabela .
Sintaxe
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parâmetros
| Vigência | Definição |
|---|---|
expression |
A expressão a avaliar. |
filter1, filter2,… |
(Opcional) Expressões booleanas ou expressões de tabela que definem filtros ou funções modificadoras de filtro. |
A expressão que usas como primeiro parâmetro funciona como uma medida.
Os filtros podem ser:
- Expressões de filtro booleano
- Expressões de filtro de tabela
- Funções de modificação do filtro
Quando usas múltiplos filtros, podes avaliá-los usando o AND operador lógico (&&), o que significa que todas as condições devem ser TRUE, ou pelo OR operador lógico (||), o que significa que qualquer uma das condições pode ser verdadeira. Para mais informações, vejaDAX operadores > lógicos de operadores.
Expressões de filtro booleano
Um filtro de expressão booleano é uma expressão que é avaliada como TRUE ou FALSE. Deve seguir várias regras:
Pode referenciar colunas a partir de uma única tabela.
Não pode referenciar medidas.
Não pode usar uma função aninhada CALCULATE .
Não pode usar funções que escaneiam ou devolvam uma tabela a menos que as passes como argumentos para funções de agregação.
Pode conter uma função de agregação que devolve um valor escalar. Por exemplo:
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Expressão do filtro de tabela
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 retorna um objeto de tabela. Pode usar a FILTER função para aplicar condições complexas de filtro, incluindo aquelas que não pode definir por uma expressão de filtro booleana.
Funções modificadoras de filtro
As funções de modificador de filtro permitem-lhe fazer mais do que simplesmente adicionar filtros. Dão-te controlo extra ao modificar o contexto do filtro.
| Função | Finalidade |
|---|---|
| REMOVEFILTERS | Remova todos os filtros ou filtros de uma ou mais colunas de uma tabela ou de todas as colunas de uma única tabela. |
| ALL 1, ALLEXCEPT, ALLNOBLANKROW | Remova filtros de uma ou mais colunas ou de todas as colunas de uma única tabela. |
| KEEPFILTERS | Adicione filtro sem remover filtros existentes nas mesmas colunas. |
| USERELATIONSHIP | Engaje uma relação inativa entre colunas relacionadas, caso em que a relação ativa se torna automaticamente inativa. |
| CROSSFILTER | Modifique a direção do filtro (de ambos para um ou de um para ambos) ou desative 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 a sua ferramenta suportar a REMOVEFILTERS função, use-a para remover filtros.
Valor de retorno
O valor que resulta da expressão.
Comentários
Quando fornece expressões de filtro, a CALCULATE função modifica o contexto do filtro para avaliar a expressão. Para cada expressão de filtro, existem dois resultados padrão quando a expressão do filtro não está envolvida na KEEPFILTERS função:
- Se as colunas ou tabelas não estiverem no contexto do filtro, novos filtros são adicionados ao contexto do filtro para avaliar a expressão.
- Se as colunas ou tabelas já estiverem no contexto do filtro, os filtros existentes são sobrescritos pelos novos filtros para avaliar a CALCULATE expressão.
Usar a CALCULATE função sem filtros atinge um requisito específico. Ele faz a transição do contexto da linha para o contexto do filtro. Esta transição é necessária quando uma expressão (não uma medida do modelo) que resume dados do modelo precisa de ser avaliada no contexto da linha. Esse cenário pode acontecer em uma fórmula de coluna calculada ou quando uma expressão em uma função iteradora é avaliada. Quando usas uma medida de modelo em contexto de linha, a transição de contexto é automática.
-
Esta função não é suportada para utilização no modo DirectQuery quando utilizada em colunas calculadas ou regras de segurança ao nível da linha (RLS).
Exemplos
Exemplos neste artigo podem ser usados com o modelo de exemplo do Power BI Desktop do Adventure Works DW 2020. Para obter o modelo, consulte DAX exemplo de modelo.
A seguinte definição de medida de de
Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
| Categoria | Valor das vendas | Receita Azul |
|---|---|---|
| Acessórios | $1.272.057,89 | $165,406.62 |
| Bicicletas | $94,620,526.21 | $8,374,313.88 |
| Vestuário | $2.117.613,45 | $259,488.37 |
| Componentes | $11,799,076.66 | $803,642.10 |
| Total | $109.809.274,20 | $9,602,850.97 |
A função CALCULATE avalia a soma da tabela Salescoluna Sales Amount em um contexto de filtro modificado. Um novo filtro é adicionado à tabela Produto coluna Cor — ou o filtro substitui qualquer filtro que já tenha sido aplicado à coluna.
A seguinte definição de tabela de de vendas produz uma proporção de vendas sobre vendas para todos os canais de vendas.
Revenue % Total Channel =
DIVIDE (
SUM ( Sales[Sales Amount] ),
CALCULATE (
SUM ( Sales[Sales Amount] ),
REMOVEFILTERS ( 'Sales Order'[Channel] )
)
)
| Canal | Valor das vendas | Receita % Canal Total |
|---|---|---|
| Internet | $29.358.677,22 | 26.74% |
| Revendedor | $80,450,596.98 | 73.26% |
| Total | $109.809.274,20 | 100,00% |
A função DIVIDE divide uma expressão que soma da tabela SalesValor de Vendas valor da coluna (no contexto de filtro) pela mesma expressão em um contexto de filtro modificado. É a função CALCULATE que modifica o contexto do filtro usando a função REMOVEFILTERS, que é uma função modificadora de filtro. Ele remove filtros da tabela Ordem de Venda coluna Canal.
A definição de coluna calculada da tabela Cliente a seguir classifica os clientes em uma classe de fidelidade. É um cenário muito simples: quando a receita produzida pelo cliente é inferior a $2500, eles são classificados como Baixo; caso contrário, eles são High.
Customer Segment =
IF (
CALCULATE (
SUM ( Sales[Sales Amount] ),
ALLEXCEPT ( Customer, Customer[CustomerKey] )
) < 2500,
"Low",
"High"
)
| Segmento de Clientes | Número de Clientes | Valor das vendas |
|---|---|---|
| Alto | 4,637 | $102.670.663,09 |
| Baixo | 13,848 | $7.138.611,11 |
| Total | 18,485 | $109.809.274,20 |
Neste exemplo, o contexto de linha é convertido para o contexto de filtro. É conhecida como transição de contexto. A função ALLEXCEPT remove filtros de todas as colunas da tabela Customer, exceto a coluna CustomerKey.