CALCULATE em DAX: o motor de todas as medidas avançadas
CALCULATE é considerada a função mais poderosa e fundamental do DAX. Praticamente todas as medidas não-triviais dependem dela. A sua função é simples mas o seu impacto é profundo: avaliar uma expressão num contexto de filtro modificado.
Sintaxe
CALCULATE(
<Expressão>,
<Filtro1>,
<Filtro2>,
...
)
Exemplo básico
Vendas Lisboa = CALCULATE(
SUM(fVendas[Receita]),
dRegiao[Cidade] = "Lisboa"
)
Mesmo que o relatório esteja filtrado por outra cidade, esta medida sempre mostra as vendas de Lisboa.
CALCULATE com REMOVEFILTERS
% do Total = DIVIDE(
SUM(fVendas[Receita]),
CALCULATE(SUM(fVendas[Receita]), REMOVEFILTERS(dRegiao))
)
O REMOVEFILTERS remove o filtro da dimensão de região, permitindo calcular a percentagem sobre o total independentemente do filtro aplicado no visual.
CALCULATE com ALL, ALLEXCEPT, ALLSELECTED
ALL(tabela)— remove todos os filtros da tabela.ALLEXCEPT(tabela, coluna)— remove todos os filtros excepto o da coluna especificada.ALLSELECTED()— remove filtros internos mas preserva os do utilizador (slicers/cross-filter).
CALCULATE e context transition
Quando CALCULATE é chamado dentro de um iterador (como SUMX), converte o contexto de linha em contexto de filtro — cada linha da iteração filtra a tabela antes de avaliar a expressão.
Conclusão
CALCULATE não é apenas uma função — é o mecanismo pelo qual o DAX manipula o contexto de avaliação. Dominá-la abre a porta a medidas de time intelligence, análises comparativas, rankings dinâmicos e muito mais.