Compartilhar via


CALCULATE

aplica-se a:coluna calculadatabela calculadamedidacálculo visual

Avalia uma expressão em um contexto de filtro modificado.

Nota

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

Prazo Definição
expression A expressão a ser avaliada.
filter1, filter2,… (Opcional) Expressões boolianas ou expressões de tabela que definem filtros ou funções modificadoras 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
  • Filtrar funções de modificação

Quando há vários filtros, eles podem ser avaliados usando a AND (&&) operador lógico, o que significa que todas as condições devem ser TRUEou pelo operador lógico OR (||), o que significa que qualquer condição pode ser verdadeira.

Expressões de filtro booliano

Um filtro de expressão booliana é uma expressão que é avaliada como TRUE ou FALSE. 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 ou 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 valor escalar. Por exemplo
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Expressão de 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. 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 booliano.

Funções modificadoras de filtro

As funções modificadoras de filtro permitem que você faça mais do que simplesmente adicionar filtros. Eles fornecem controle adicional ao modificar o contexto de filtro.

Função Propósito
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 Envolva uma relação inativa entre colunas relacionadas, caso em que a relação ativa ficará automaticamente inativa.
CROSSFILTER Modifique a direção do filtro (de ambos para um ou de único para ambos) ou desabilite 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 função REMOVEFILTERS for compatível com sua ferramenta, é melhor usá-la para remover filtros.

Valor de retorno

O valor que é o resultado da expressão.

Observações

  • 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 do 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. Ele 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 do modelo precisa ser avaliada no contexto de linha. Esse cenário pode acontecer em uma fórmula de coluna calculada ou quando uma expressão em uma função iterador é avaliada. Observe que quando uma medida de modelo é usada no contexto de linha, a transição de contexto é automática.

  • Essa função não tem suporte para uso no modo DirectQuery quando usada em colunas calculadas ou regras de RLS (segurança em nível de linha).

Exemplos

A definição de medida da tabela Sales a seguir produz um resultado de receita, mas apenas para produtos que têm a cor azul.

Exemplos neste artigo podem ser usados com o modelo adventure works dw 2020 power bi desktop de exemplo. Para obter o modelo, consulte DAX modelo de exemplo.

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 a soma da tabela SalesSales Amount coluna em um contexto de filtro modificado. Um novo filtro é adicionado à tabela Productcolor coluna ou, o filtro substitui qualquer filtro que já esteja aplicado à coluna.

A definição de medida de tabela Vendas a seguir produz uma proporção de vendas em relação às vendas para todos os canais de vendas.

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 SalesValor de Vendas valor da coluna (no contexto do 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 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 do filtro. É conhecido comode transição de contexto . A função remove filtros de todas as colunas da tabela cliente , exceto a coluna CustomerKey.

Filtrar contextofunção deCALCULATETABLE de contexto de linhafiltrar funções