O maior obstáculo para quem aprende DAX não é a sintaxe — é entender por que o mesmo cálculo às vezes retorna o resultado certo e às vezes não. A resposta está nos dois contextos de avaliação do DAX: contexto de filtro e contexto de linha. Dominá-los é a diferença entre adivinhar fórmulas e escrevê-las com confiança.

Contexto de filtro

O contexto de filtro é o conjunto de filtros ativos quando uma medida é calculada. Esses filtros vêm de:

Quando você coloca Total Vendas = SUM(Pedidos[Valor]) em um gráfico de barras por região, a medida calcula a soma apenas das linhas onde a região = o valor da barra atual. O contexto de filtro é automático — você não precisa escrever isso.

Contexto de linha

O contexto de linha existe quando o DAX itera linha a linha sobre uma tabela. Isso acontece em:

Em uma coluna calculada Margem = Pedidos[Receita] - Pedidos[Custo], o DAX sabe que "Receita" e "Custo" se referem à linha atual — isso é o contexto de linha.

Por que isso importa: o erro clássico

Suponha que você tente referenciar uma medida dentro de FILTER:

-- ERRADO: [Total Vendas] é uma medida, não funciona como filtro de linha
Clientes Premium =
COUNTROWS(FILTER(Clientes; [Total Vendas] > 10000))

Isso funciona! Porque FILTER itera sobre a tabela Clientes e, para cada linha, cria um contexto de filtro que inclui aquele cliente específico — o que faz [Total Vendas] calcular corretamente para cada cliente.

Mas este é mais eficiente:

Clientes Premium =
COUNTROWS(FILTER(Clientes; CALCULATE(SUM(Pedidos[Valor])) > 10000))

Transição de contexto: CALCULATE

CALCULATE converte o contexto de linha atual em contexto de filtro. Essa é a operação mais poderosa do DAX — e o motivo pelo qual CALCULATE é tão fundamental.

Dentro de uma coluna calculada, referenciar uma medida sem CALCULATE pode dar resultados inesperados porque a medida não "vê" o contexto de linha como filtro. CALCULATE faz a transição:

-- Coluna calculada na tabela Clientes
Vendas do Cliente = CALCULATE(SUM(Pedidos[Valor]))

O CALCULATE converte "estou na linha do cliente X" em um filtro "ID_Cliente = X" para a medida.

Perguntas frequentes

Quando uma medida retorna o mesmo valor em todas as linhas de uma tabela, qual é o problema?

A medida não está recebendo o filtro correto. Verifique se o relacionamento entre as tabelas existe e está na direção certa, e se o campo no eixo/linhas da visualização pertence à tabela de dimensão (não à tabela de fato).

SUMX é melhor que SUM?

Depende. SUM é mais rápido para somas simples de colunas. SUMX é necessário quando você precisa calcular algo para cada linha antes de somar — como SUMX(Pedidos; Pedidos[Qtd] * Pedidos[PreçoUnit]).