CALCULAR

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

Termo Definição
expressão A expressão a ser avaliada.
filter1, filter2,... (Opcional) Expressões booleanas ou expressões de tabela que definem filtros ou funções modificadoras de filtro.

A expressão utilizada como primeiro parâmetro é essencialmente a mesma que 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 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.

Expressões de filtro booleano

Um filtro de expressão booleana é uma expressão que é avaliada como VERDADEIRA ou FALSA. 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 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 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. 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 booleano.

Funções modificadoras de filtro

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

Function Propósito
REMOVERFILTROS Remova todos os filtros ou filtros de uma ou mais colunas de uma tabela ou de todas as colunas de uma única tabela.
TODOS OS1, ALLEXCEPT, ALLNOBLANKROW Remova filtros de uma ou mais colunas ou de todas as colunas de uma única tabela.
MANTERFILTROS Adicione filtro sem remover filtros existentes nas mesmas colunas.
USERELACIONAMENTO Envolva uma relação inativa entre colunas relacionadas, caso em que a relação ativa se tornará automaticamente inativa.
FILTRO CRUZADO 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 função REMOVEFILTERS for suportada pela sua ferramenta, é melhor usá-la para remover filtros.

Valor devolvido

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 do filtro, novos filtros serão adicionados ao contexto do 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 utilizada sem filtros atinge um requisito específico. Ele faz a transição do contexto da linha para o contexto do 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. Este cenário pode ocorrer numa fórmula de coluna calculada ou quando se avalia uma expressão numa função de iterador. Observe que quando uma medida de modelo é usada no 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

A definição de medida da tabela de vendas 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 de exemplo do Power BI Desktop do Adventure Works DW 2020. Para obter o modelo, consulte Modelo de exemplo DAX.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Category Sales Amount Receita Azul
Accessories $1.272.057,89 $165,406.62
Bikes $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 CALCULAR avalia a soma da coluna Valor de Vendas da tabela Sales em um contexto de filtro modificado. Um novo filtro é adicionado à coluna Cor da tabela de produtos — ou o filtro substitui qualquer filtro que já tenha sido aplicado à coluna.

A definição de medida da tabela Sales a seguir produz uma proporção de vendas sobre vendas para todos os canais de vendas.

Canal Sales Amount Receita % Canal Total
Internet $29.358.677,22 26.74%
Reseller 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 DIVIDIR divide uma expressão que soma o valor da coluna Valor de Vendas da tabela Sales (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 coluna Canal da tabela Ordem de Venda.

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 é inferior a R$ 2500, eles são classificados como Baixos, caso contrário, são Altos.

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 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 .

Contexto do filtro
Contexto da linha
Função CALCULATETABLE
Funções de filtro