FILTER e ALL no DAX: Como Manipular o Contexto de Filtro no Power Pivot

FILTER(tabela; condição) devolve uma tabela filtrada linha a linha, útil quando uma comparação simples dentro do CALCULATE não é suficiente; ALL(tabela ou coluna) remove os filtros já aplicados pelo relatório, permitindo calcular totais gerais independente do que está selecionado — juntas, essas duas funções são a base para entender e manipular o contexto de filtro no DAX.

Você já tentou calcular “o percentual que cada categoria representa do total geral” ou “a soma apenas dos pedidos acima da média” numa medida DAX, e travou porque o CALCULATE sozinho, com uma condição simples, não dava conta do recado?

Sem entender como o contexto de filtro funciona por trás dos panos, fica difícil saber por que um filtro de segmentação afeta uma medida mas não afeta outra, ou por que uma condição envolvendo comparação com uma agregação (como “acima da média”) não pode ser escrita como um filtro comum dentro do CALCULATE.

Neste artigo iremos mostrar o que é contexto de filtro, como usar FILTER para condições mais complexas, como usar ALL para remover filtros, e as variações ALLEXCEPT e ALLSELECTED que resolvem casos intermediários.

DOMINE EXCEL COMIGO

QUERO APRENDER EXCEL

Observação: se você ainda não conhece a função CALCULATE, vale ler primeiro o nosso artigo Como Dominar o CALCULATE no DAX do Power BI, que introduz o conceito com um resumo rápido de ALL e FILTER. Este artigo aqui aprofunda especificamente o contexto de filtro e as duas funções, com mais exemplos e as variações ALLEXCEPT e ALLSELECTED.

Contexto de linha vs contexto de filtro

O DAX trabalha com dois tipos de contexto. O contexto de linha existe quando uma fórmula está sendo avaliada linha por linha, como numa coluna calculada ou dentro de uma função como FILTER e SUMX. O contexto de filtro é o conjunto de filtros ativos no momento em que uma medida é calculada — vindo dos filtros da página, das segmentações de dados e dos elementos do próprio visual. Entender essa diferença é o primeiro passo para usar FILTER e ALL corretamente.

A função FILTER

FILTER percorre uma tabela linha por linha e devolve apenas as linhas que atendem à condição informada, criando uma tabela virtual que pode ser usada dentro de outra função, geralmente o CALCULATE:

=FILTER(tabela; condição)

Um uso clássico é filtrar valores acima de uma agregação, algo que não dá para escrever como uma simples comparação de coluna:

Vendas Acima da Média = CALCULATE( SUM(Vendas[Valor]); FILTER(Vendas; Vendas[Valor] > AVERAGE(Vendas[Valor])) )

Aqui o FILTER avalia, linha a linha, se aquele valor específico é maior que a média geral — algo que só é possível porque o FILTER tem acesso ao contexto de linha durante a avaliação.

A função ALL: removendo filtros

ALL faz o caminho oposto: em vez de restringir, ela remove filtros já aplicados. Usada dentro do CALCULATE, permite calcular um total geral independente da segmentação ou do filtro de página ativo:

% do Total Geral = DIVIDE( SUM(Vendas[Valor]); CALCULATE(SUM(Vendas[Valor]); ALL(Vendas)) )

Repare que ALL(Vendas) remove todos os filtros da tabela inteira, incluindo qualquer coluna dela — por isso o denominador dessa medida sempre representa o total geral, não importa qual categoria, região ou período esteja filtrado no visual.

ALLEXCEPT: removendo todos os filtros, exceto um

Quando você quer remover a maioria dos filtros, mas manter um específico, use ALLEXCEPT em vez de combinar ALL com vários outros filtros manualmente:

% da Categoria = DIVIDE( SUM(Vendas[Valor]); CALCULATE(SUM(Vendas[Valor]); ALLEXCEPT(Vendas; Vendas[Categoria])) )

Essa medida remove os filtros de região, vendedor e data, mas preserva o filtro de Categoria — o resultado mostra o percentual que cada linha representa dentro da própria categoria, não do total geral da tabela inteira.

ALLSELECTED: respeitando o que o usuário escolheu

Uma variação importante é ALLSELECTED, que remove os filtros vindos do contexto interno do visual (como o agrupamento de uma tabela), mas continua respeitando os filtros que o usuário aplicou manualmente por fora, como uma segmentação de dados. Ela é a escolha certa quando você quer um “total do que está sendo mostrado no momento”, em vez do total absoluto da tabela inteira.

Exemplo prático completo

Uma tabela de vendas por categoria, com uma medida de percentual do total geral usando ALL:

A B
1 Categoria Valor
2 Eletrônicos 32000
3 Móveis 18000
4 Papelaria 5000

Com a medida % do Total Geral criada acima, ao colocar Categoria numa Tabela Dinâmica ou visual, Eletrônicos mostra 58,2%, Móveis mostra 32,7% e Papelaria mostra 9,1% — cada linha calculando sua fatia sobre o total de 55.000, mesmo que o próprio visual só mostre a linha filtrada.

Erros comuns

Um erro frequente é usar ALL(Tabela) quando na verdade só se queria remover o filtro de uma coluna específica, o que acaba zerando também relacionamentos e filtros que deveriam continuar ativos — nesses casos, ALLEXCEPT costuma ser a escolha mais segura. Outro erro comum é usar FILTER para condições simples que uma comparação direta dentro do CALCULATE já resolveria (como Vendas[Região] = “Sul”), o que deixa a fórmula mais lenta sem necessidade, já que o CALCULATE aceita filtros diretos sem precisar do FILTER por cima.

Disponibilidade

FILTER, ALL, ALLEXCEPT e ALLSELECTED estão disponíveis em qualquer lugar que use o motor DAX: Power Pivot no Excel 2013 em diante (Windows, incluindo Microsoft 365), Power BI Desktop e Power BI Service. Não existem no Excel para Mac nem no Excel Online, e não têm equivalente no Google Sheets.

Perguntas frequentes

Qual a diferença entre filtrar direto no CALCULATE e usar FILTER?

Um filtro direto no CALCULATE (como Vendas[Região] = “Sul”) só aceita comparações simples de coluna. O FILTER é necessário quando a condição depende de uma agregação, como comparar cada linha com a média geral, algo que exige contexto de linha para ser avaliado.

ALL(Tabela) remove só um filtro ou todos de uma vez?

ALL aplicado numa tabela inteira remove todos os filtros de todas as colunas daquela tabela. Se você quer remover a maioria dos filtros mas manter um específico, use ALLEXCEPT em vez de ALL.

Qual a diferença entre ALL e ALLSELECTED?

ALL remove todos os filtros, calculando sempre o total absoluto da tabela. ALLSELECTED remove apenas os filtros internos do próprio visual, mas continua respeitando filtros externos aplicados manualmente, como uma segmentação de dados escolhida pelo usuário.

Veja também: Como Dominar o CALCULATE no DAX do Power BI e DISTINCTCOUNT no DAX: Como Contar Clientes Únicos no Power Pivot.

Compartilhe ou Comente

Se você curtiu esse artigo aonde mostramos o que é contexto de filtro no DAX, como usar FILTER para condições que dependem de uma agregação, e como usar ALL, ALLEXCEPT e ALLSELECTED para remover filtros de forma controlada, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.

Você já travou tentando calcular um percentual do total geral numa medida DAX? Prefere resolver com ALL, ALLEXCEPT ou ainda tem dúvida de quando usar cada um? Conta para nós nos comentários!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *