Contexto de linha vs. contexto de filtro em DAX: a distinção essencial
DAX tem dois tipos de contexto de avaliação que determinam como uma expressão é calculada. Confundi-los é a principal fonte de erros para quem começa em DAX — e mesmo para profissionais experientes.
Contexto de linha
Ocorre quando o DAX itera linha a linha sobre uma tabela. Existe em colunas calculadas e em funções de iteração como SUMX, AVERAGEX, FILTER.
-- Coluna calculada (contexto de linha)
Margem = fVendas[Receita] - fVendas[Custo]
Aqui, fVendas[Receita] e fVendas[Custo] referem-se aos valores da linha actual.
Contexto de filtro
Ocorre em medidas. Quando um visual aplica filtros (por data, categoria, região), esses filtros criam um contexto de filtro que restringe as linhas visíveis antes da avaliação da medida.
-- Medida (contexto de filtro)
Vendas Total = SUM(fVendas[Receita])
-- O SUM calcula apenas as linhas visíveis no contexto actual
O erro clássico
Usar uma referência de coluna dentro de uma medida como se fosse contexto de linha:
-- ERRADO numa medida:
Margem Errada = fVendas[Receita] - fVendas[Custo]
-- Erro: ambiguous column reference in measure
Para iterar em medidas, use funções X:
-- CORRECTO:
Margem Total = SUMX(fVendas, fVendas[Receita] - fVendas[Custo])
Transição de contexto
Quando se chama uma medida dentro de um contexto de linha (e.g., dentro de SUMX), o DAX converte automaticamente o contexto de linha em contexto de filtro — isto chama-se context transition. É poderoso mas pode causar comportamentos inesperados se não for antecipado.
Conclusão
Dominar contexto de linha e de filtro é a base para escrever DAX correcto. Antes de escrever qualquer expressão, pergunte-se: "estou a operar linha a linha ou sobre um conjunto filtrado?" A resposta determina a abordagem correcta.