Pular para o conteúdo
Fynx
Power BI14 min de leitura

Contexto de linha e de filtro em DAX: o que faz e quando usar (com exemplos)

Entenda contexto de linha e de filtro DAX, a base que trava todo iniciante no Power BI, com sintaxe, exemplos, armadilhas e boas práticas.

F
Fynx

O motivo real de sua medida DAX retornar o número errado

Se você já escreveu uma medida no Power BI, arrastou para um visual e viu um valor que não fazia o menor sentido, provavelmente o problema não foi a fórmula. Foi o contexto. O contexto de linha e de filtro DAX é o conceito que trava praticamente todo iniciante, porque a mesma expressão pode devolver resultados completamente diferentes dependendo de onde ela é avaliada. Entender isso não é opcional: é a diferença entre chutar fórmulas até uma delas parecer certa e realmente saber o que o motor está calculando.

A boa notícia é que, uma vez que a ficha cai, DAX deixa de ser uma loteria. Você passa a prever o resultado antes de apertar Enter. Este artigo explica os dois contextos de avaliação, mostra a sintaxe envolvida, traz exemplos conceituais, aponta as armadilhas clássicas e fecha com boas práticas que usamos em projeto real. O objetivo é que você saia daqui capaz de ler uma medida e dizer, com segurança, qual valor ela vai produzir em cada célula do relatório.

DAX avalia toda expressão dentro de um contexto

Nenhuma fórmula DAX roda no vácuo. Toda expressão é avaliada dentro de um contexto, e existem dois tipos: o contexto de linha e o contexto de filtro. Eles não são a mesma coisa, não fazem a mesma coisa e não surgem nas mesmas situações. Confundir os dois é a raiz de quase todo erro de iniciante.

De forma direta:

  • Contexto de linha: existe quando a expressão sabe em qual linha da tabela ela está. É o contexto de uma coluna calculada e de tudo que roda dentro de um iterador como SUMX.
  • Contexto de filtro: é o conjunto de filtros ativos que restringe os dados visíveis no momento do cálculo. Vem dos visuais, das segmentações, dos eixos de uma matriz e de funções como CALCULATE.

O erro mais comum é achar que uma medida "enxerga a linha atual" como uma coluna calculada. Ela não enxerga. Medida trabalha com contexto de filtro. Coluna calculada trabalha com contexto de linha. Guardar essa distinção resolve metade dos problemas.

Contexto de linha: quando DAX sabe em qual linha está

O contexto de linha aparece em duas situações principais: colunas calculadas e funções iteradoras.

Numa coluna calculada, o motor percorre a tabela linha a linha. Em cada linha, uma expressão como Vendas[Quantidade] * Vendas[PrecoUnitario] sabe exatamente qual quantidade e qual preço usar, porque está posicionada naquela linha específica. Esse é o contexto de linha em sua forma mais pura.

A segunda situação são os iteradores, as funções que terminam em X: SUMX, AVERAGEX, MINX, MAXX, RANKX, entre outras. Elas recebem uma tabela e uma expressão, percorrem a tabela linha por linha e avaliam a expressão em cada uma, criando um contexto de linha temporário. Depois agregam o resultado. Por exemplo, SUMX(Vendas, Vendas[Quantidade] * Vendas[PrecoUnitario]) cria um contexto de linha sobre Vendas, calcula quantidade vezes preço em cada linha e soma tudo no final.

Um detalhe que confunde muita gente: o contexto de linha não filtra o modelo. Ele apenas diz qual linha está sendo lida agora. Ele também não atravessa relacionamentos sozinho. Se você está numa linha da tabela Vendas e quer o valor de uma coluna da tabela Produtos, precisa da função RELATED para trazer esse valor pela relação existente. O contexto de linha, por si só, não puxa dados de outra tabela.

Contexto de filtro: o que está visível no momento do cálculo

O contexto de filtro é o conjunto de restrições ativas que definem quais linhas dos dados participam do cálculo. Quando você coloca uma medida Total Vendas = SUM(Vendas[Valor]) numa matriz com produtos nas linhas e meses nas colunas, cada célula tem um contexto de filtro diferente. A célula do produto A em janeiro só enxerga as vendas do produto A em janeiro. A célula de total geral enxerga tudo. A fórmula é idêntica em todas as células; o que muda é o contexto de filtro.

O contexto de filtro é montado por vários elementos ao mesmo tempo:

  • Os campos nas linhas e colunas de um visual.
  • As segmentações de dados (slicers) da página.
  • Os filtros de página, de visual e de relatório.
  • As funções CALCULATE e CALCULATETABLE, que modificam o contexto por código.

É importante entender que esses filtros se combinam. Se o slicer já restringe o ano para 2026 e o eixo da matriz restringe o mês para março, a célula enxerga apenas março de 2026. O contexto de filtro é sempre a interseção de todos os filtros ativos.

Diferente do contexto de linha, o contexto de filtro propaga por relacionamentos. Um filtro aplicado na tabela Produtos desce, pela relação, e restringe a tabela Vendas. É assim que uma dimensão consegue fatiar uma tabela fato sem que você escreva nada explícito.

A tabela que resume a diferença

Muita gente entende o conceito lendo a comparação lado a lado. Aqui está o resumo que costumamos usar em treinamento:

AspectoContexto de linhaContexto de filtro
Onde surgeColunas calculadas e iteradores (X)Visuais, slicers, filtros e CALCULATE
O que representaA linha atual sendo avaliadaO conjunto de dados visível no cálculo
Filtra o modeloNãoSim
Atravessa relacionamentosNão, precisa de RELATEDSim, propaga pela relação
Típico emColuna calculada, SUMXMedida em visual
Função que cria/alteraSUMX, AVERAGEX, RANKXCALCULATE, CALCULATETABLE

Se você tiver essa tabela na cabeça ao escrever DAX, evita a maioria dos tropeços. Vale complementar com a leitura sobre modelagem e boas práticas de DAX no Power BI, onde tratamos de estrutura de modelo, que é o alicerce de tudo isso.

CALCULATE é a função que muda o contexto de filtro

Se existe uma função para dominar em DAX, é CALCULATE. Ela é a única forma direta de modificar o contexto de filtro por código. A sintaxe básica é:

CALCULATE(<expressão>, <filtro1>, <filtro2>, ...)

O primeiro argumento é o que se quer calcular. Os argumentos seguintes são filtros que são aplicados ao contexto antes de a expressão rodar. Por exemplo, CALCULATE(SUM(Vendas[Valor]), Produtos[Categoria] = "Bebidas") calcula a soma de valor considerando apenas a categoria Bebidas, independentemente do que o visual já estava mostrando.

Aqui entra o comportamento que mais gera dúvida: por padrão, os filtros de CALCULATE substituem o filtro existente para aquela coluna, não somam a ele. Se o visual já filtrava a categoria em "Alimentos" e sua medida força "Bebidas", o resultado é Bebidas. O filtro novo sobrescreve o antigo na mesma coluna. Para outras colunas não mencionadas, os filtros do visual continuam valendo.

CALCULATE também faz uma coisa poderosa e silenciosa chamada transição de contexto. Quando CALCULATE roda dentro de um contexto de linha, por exemplo dentro de um SUMX ou numa coluna calculada, ele transforma esse contexto de linha em contexto de filtro. Na prática, a linha atual vira um filtro. É por isso que chamar uma medida dentro de um iterador funciona: toda medida tem um CALCULATE implícito ao seu redor, o que dispara a transição de contexto automaticamente. Esse mecanismo é elegante, mas também é fonte de resultados surpreendentes quando você não espera por ele.

Exemplos conceituais que mostram os dois contextos em ação

Vamos a três cenários que aparecem em quase todo projeto.

Cenário 1: coluna calculada de margem. Você cria Margem = Vendas[Valor] - Vendas[Custo]. Isso funciona porque a coluna calculada tem contexto de linha: em cada linha, valor e custo são conhecidos. Se tentasse escrever SUM(Vendas[Valor]) - SUM(Vendas[Custo]) numa coluna calculada, o resultado seria o total geral repetido em toda linha, porque SUM ignora o contexto de linha e agrega tudo.

Cenário 2: receita total numa medida. Você escreve Receita = SUMX(Vendas, Vendas[Quantidade] * Vendas[Preco]). O SUMX cria contexto de linha para calcular quantidade vezes preço linha a linha. Mas o valor final respeita o contexto de filtro do visual. Numa matriz por mês, cada mês mostra sua própria receita, porque o contexto de filtro do eixo restringe as linhas de Vendas antes de o SUMX iterar.

Cenário 3: percentual sobre o total geral. Você quer que cada categoria mostre sua participação no total. A medida % do Total = DIVIDE([Receita], CALCULATE([Receita], ALL(Produtos))) usa ALL para remover o filtro de produtos no denominador. O numerador respeita o contexto da célula, o denominador ignora o filtro de categoria e devolve o total geral. A razão entre os dois é a participação. Sem ALL, numerador e denominador seriam iguais e o resultado seria sempre 100%.

Esses três casos cobrem a maior parte do que se faz no dia a dia: cálculo por linha, agregação com iterador e manipulação de contexto com CALCULATE e funções de remoção de filtro.

As armadilhas que fazem o iniciante perder horas

Alguns erros se repetem em todo time que está aprendendo DAX. Vale conhecê-los antes de cair neles.

ArmadilhaO que aconteceComo evitar
Usar SUM em coluna calculada esperando o valor da linhaRetorna o total geral repetidoUse a referência direta da coluna, que já tem contexto de linha
Achar que medida enxerga a linha atualA medida usa contexto de filtro, não de linhaUse um iterador (SUMX) se precisa de cálculo linha a linha
Esquecer RELATED em contexto de linhaErro ou coluna não encontrada entre tabelasTraga a coluna da outra tabela com RELATED
Somar filtros achando que CALCULATE acumulaO filtro novo substitui o antigo na mesma colunaUse KEEPFILTERS quando quiser intersecção
Ignorar a transição de contextoMedida dentro de iterador filtra pela linhaEntenda que toda medida carrega CALCULATE implícito
Aplicar ALL sem querer remover tudoPerde filtros que deveriam continuarPrefira REMOVEFILTERS ou ALLEXCEPT para controle fino

A armadilha da transição de contexto merece atenção especial. Quando você escreve SUMX(Produtos, [Receita]), cada iteração da tabela Produtos dispara a transição de contexto por causa da medida [Receita], e a receita passa a ser calculada produto a produto. Isso costuma ser exatamente o que você quer, mas se a intenção era outra, o resultado assusta. Saber que existe é metade da solução.

Boas práticas de quem usa DAX em produção

Depois de muitos projetos, algumas práticas se firmam como padrão. Elas não são regras acadêmicas: economizam tempo de manutenção e evitam retrabalho.

Prefira medidas a colunas calculadas sempre que possível. Colunas calculadas são materializadas e ocupam espaço no modelo. O motor VertiPaq comprime colunas por cardinalidade, e uma coluna calculada de alta cardinalidade pesa no arquivo e na memória. Medidas são calculadas em tempo de consulta e não incham o modelo. Use coluna calculada apenas quando precisa fatiar, agrupar ou relacionar por aquele valor.

Nomeie e organize suas medidas. Um modelo com dezenas de medidas soltas vira um pesadelo de manutenção. Agrupe por tabela de medidas, use nomes claros e mantenha um padrão. Isso importa ainda mais quando várias pessoas mexem no mesmo relatório, tema que tratamos em governança de dados no Power BI.

Comente lógica não óbvia. DAX aceita comentários com // e /* */. Uma medida com transição de contexto ou remoção seletiva de filtro merece uma linha explicando a intenção, para o próximo desenvolvedor não desfazer sem querer.

Teste em contextos diferentes antes de confiar. Coloque a medida numa matriz, adicione um slicer, olhe o total geral e uma célula específica. Se todos batem com o esperado, a medida está robusta. Se o total geral quebra, quase sempre é problema de contexto.

Modele antes de calcular. A maioria dos problemas de DAX é, na verdade, problema de modelagem. Um esquema estrela bem montado, com dimensões e fato claros, faz o contexto de filtro se propagar de forma previsível. Se você luta contra o DAX, muitas vezes está lutando contra um modelo mal estruturado. Para times que estão estruturando isso do zero, vale o guia completo de Power BI para empresas no Brasil.

Por que isso escala com Fabric e o ecossistema Microsoft

Dominar contexto de avaliação não é só sobre acertar uma medida isolada. À medida que o volume de dados cresce, o modelo precisa ser eficiente, e DAX bem escrito é parte disso. No Microsoft Fabric, anunciado em 2023, o modo Direct Lake lê dados diretamente do OneLake sem importar nem duplicar, e o consumo de recursos é medido em Capacity Units nas SKUs que vão de F2 a F2048. DAX ineficiente, cheio de colunas calculadas desnecessárias e medidas que quebram o contexto, consome mais capacidade e degrada a experiência. Escrever medidas que respeitam o contexto é também uma decisão de custo.

Vale lembrar que a Microsoft é reconhecida como Líder no Quadrante Mágico do Gartner para plataformas de Analytics e BI, e a adoção do Power BI no Brasil acompanha a forte penetração do ecossistema Microsoft nas empresas. Isso significa que a competência em DAX é um ativo durável: não é uma moda passageira, é a linguagem central de uma plataforma consolidada. Se sua operação está avaliando essa jornada com mais profundidade, nosso time de analytics avançado e de Power BI atua exatamente nesse ponto, do modelo à medida.

Perguntas frequentes

Qual a diferença prática entre contexto de linha e contexto de filtro? O contexto de linha sabe qual linha da tabela está sendo lida, e aparece em colunas calculadas e iteradores. O contexto de filtro define quais dados estão visíveis no cálculo, e vem de visuais, slicers, filtros e CALCULATE. O primeiro não filtra o modelo; o segundo sim. Confundir os dois é a causa mais comum de resultados errados.

Por que minha medida mostra o total geral repetido em cada linha? Isso geralmente acontece quando você usa uma função de agregação como SUM esperando o valor da linha, mas em um contexto que não tem o filtro certo, ou quando escreve a lógica numa coluna calculada sem considerar que a agregação ignora o contexto de linha. Reveja se precisa de um iterador como SUMX para calcular linha a linha.

O que é transição de contexto? É o mecanismo pelo qual CALCULATE transforma um contexto de linha em contexto de filtro. Como toda medida carrega um CALCULATE implícito, chamar uma medida dentro de um iterador dispara a transição automaticamente, e a linha atual vira um filtro. É poderoso, mas surpreende quem não espera por ele.

Quando devo usar coluna calculada e quando devo usar medida? Use medida por padrão, porque ela é calculada em tempo de consulta e não ocupa espaço no modelo. Use coluna calculada apenas quando precisa daquele valor para agrupar, filtrar, ordenar ou criar relacionamento. Colunas calculadas de alta cardinalidade pesam no VertiPaq e devem ser evitadas quando não são necessárias.

Para que serve a função ALL dentro de CALCULATE? ALL remove filtros de uma coluna ou tabela dentro do cálculo, o que é útil para obter totais que ignoram o filtro atual, como em cálculos de participação percentual. Para controle mais fino, considere REMOVEFILTERS, ALLEXCEPT ou KEEPFILTERS, dependendo de quais filtros você quer manter ou descartar.

Preciso de licença específica para usar DAX no Power BI? DAX é a linguagem do Power BI e está disponível em todas as licenças, incluindo o Power BI Pro e o Premium Per User (PPU), que são licenças por usuário. O que muda entre licenças e capacidades é o volume, o compartilhamento e recursos avançados, não o acesso à linguagem em si. Confirme sempre os detalhes e faixas de preço na fonte oficial da Microsoft, pois variam.

Um último ponto antes de você abrir o Power BI

Contexto de linha e de filtro não é um detalhe avançado de DAX. É o alicerce. Toda medida que você escrever, todo cálculo que parecer mágico ou quebrado, se resolve entendendo em qual contexto a expressão está rodando. Quando você para de decorar fórmulas e passa a raciocinar sobre contexto, DAX vira uma ferramenta previsível, e o Power BI vira um sistema que você controla, não que te controla.

Se seu time está travando em DAX, com relatórios lentos, medidas que ninguém entende ou números que não batem, vale uma conversa. A Fynx tem seis anos de mercado, mais de 50 clientes e mais de 2.000 soluções Microsoft entregues, e resolve exatamente esse tipo de problema, do modelo à medida. Fale com a gente e vamos destravar seu Power BI.

Quer aplicar isso na sua empresa?

A Fynx implementa BI, Power BI e Power Platform de ponta a ponta. Conte seu cenário e devolvemos um diagnóstico direto ao ponto.

Falar com um especialista

Vamos transformar seus dados em decisão?

Conte seu cenário. Devolvemos um diagnóstico e uma proposta com faixa de investimento em poucos dias úteis, sem folheto, direto ao ponto.