Ler em inglês

Partilhar via


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

Vigência Definição
expression A expressão a ser avaliada.
filter1, filter2,… (Opcional) Expressões booleanas 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 filter booleanas
  • Tabela filter expressões
  • Filter funções de modificação

Quando há vários filters, eles podem ser avaliados usando o operador lógico AND (&&) , 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 filter booleanas

Uma expressão booleana filter é uma expressão que avalia a TRUEorFALSE. Existem várias regras que devem cumprir:

  • Eles podem fazer referência a colunas de uma única tabela.
  • Não podem fazer referência a medidas.
  • Eles não podem usar uma função 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 uma valueescalar. Por exemplo
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabela filter expressão

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 de filter complexas, incluindo aquelas que não podem ser definidas por uma expressão filter booleana.

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 Finalidade
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 all colunas de uma única tabela.
KEEPFILTERS Adicione filter sem remover filters existentes nas mesmas colunas.
USERELATIONSHIP Envolva uma relação inativa entre related colunas, caso em que a relação ativa se tornará automaticamente inativa.
CROSSFILTER Modifique filter direção (de ambos para únicos, or de único para ambos) or desative um relacionamento.

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 for suportada pela sua ferramenta, é melhor usá-la para remover filters.

Regresso value

O value que é o resultado da expressão.

Comentários

  • 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, novas filters serão adicionadas ao contexto filter para evaluate a expressão.
    • If as colunas (or tabelas) já estiverem no contexto filter, o filters existente será substituído pelo novo filters para evaluate a expressão CALCULATE.
  • A função CALCULATE utilizada sem filters atinge um requisito específico. Ele faz a transição do contexto da linha para o contexto filter. É 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 acontecer em uma fórmula de coluna calculada or quando uma expressão em uma função iteradora é avaliada. Observe que quando um modelo measure é usado no contexto de linha, a transição de contexto é automática.

  • Esta função not é suportada para uso no modo DirectQuery quando usada em colunas calculadas or regras de segurança em nível de linha (RLS).

Exemplos

A seguinte Tabela Vendas 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 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 sum da tabela Salescoluna Sales Amount em um contexto de filter modificado. Uma nova filter é adicionada à tabela Productcoluna Cor —or, o filter substitui qualquer filter que já tenha sido aplicado à coluna.

A seguinte Tabela de de vendas measure definição produz uma relação entre vendas e vendas para all canais de vendas.

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%
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 da tabela SalesSales Amount coluna value (no contexto filter) pela mesma expressão em um contexto 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 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"
)

Neste exemplo, o contexto de linha é convertido para o contexto filter. É conhecida como transição de contexto. A função remove das colunas da tabela Customer coluna CustomerKey .

Filter contexto
de contexto da linha
CALCULATETABLE função
Filter funções