(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
DAX

Contexto de linha vs. contexto de filtro em DAX: a distinção essencial

João Barros 10 de July de 2024 2 min de leitura

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.

Partilhar: