Pular para o conteúdo

CALCULAR com TUDO, FILTRAR, TUDO_EXCETO, REMOVER_FILTROS, MANTER_FILTROS

Aula 6 de 1310 minOperarAtualizada em 2026-10-04

Vídeo em produção

A gravação desta aula está no lote de produção. O objetivo, o exercício e a documentação já valem. Duração-alvo: 10 min.

Objetivo: Compor participação no total e recorte fixo

Selo de estado: Preview (teto atual do produto) · Curso ACD-320 — Fórmulas pt-BR: de SOMA a CALCULAR · Aula 6 de 13 · Atualizado em 2026-10-04.

Objetivo#

Ao final desta aula você vai compor participação no total e recorte fixo.

Vídeo#

Identificador no manifesto: acd-320-06-calcular-e-modificadores · duração-alvo 10 min · tela do produto: /dashboards.

Roteiro:

#CapítuloMinutagem-alvoRota
1Abertura — CALCULAR é a função que muda o contexto00:00–00:50/dashboards
2FILTRAR — recortar por uma condição00:50–02:30/dashboards (editor de fórmulas)
3TUDO(), TUDO_EXCETO e REMOVER_FILTROS — ignorar o grupo e os dois lados da mesma moeda02:30–06:40/dashboards (biblioteca de medidas)
4MANTER_FILTROS — somar ao filtro em vez de substituir06:40–08:10/dashboards (editor de fórmulas)
5Precedência e composição entre modificadores08:10–09:20/dashboards
6Encerramento — "faça você mesmo"09:20–10:00/dashboards

Conteúdo#

CALCULAR é a função mais importante do motor depois das agregações básicas: ela troca o contexto de filtro de uma expressão antes de avaliá-la. Tudo que esta aula ensina depende de uma coisa que a aula 5 já preparou: sem entender contexto de filtro, os modificadores de CALCULAR parecem mágica; com ela, são só "troque o recorte e calcule de novo".

CALCULAR — a assinatura

código
CALCULAR(expr; [arg2]; [arg3]; [arg4]; [arg5]; [arg6]; [arg7]; [arg8]; [arg9])

DIFERE do DAX na semântica, embora o nome lembre o CALCULATE: aqui os modificadores aceitos são um repertório fechado (condição solta, FILTRAR, TUDO, TUDO_EXCETO, REMOVER_FILTROS, ENTRE_DATAS, DATAS_NO_PERIODO, TRATAR_COMO, PRIMEIROS_N) — não há tabelas virtuais arbitrárias como no DAX completo. CALCULAR usa avaliação preguiçosa: ele escolhe o novo conjunto de linhas e só então avalia a expressão — por isso o resultado difere do que seria calcular a expressão antes e só depois trocar o contexto.

formula
CALCULAR(SOMA(valor); FILTRAR(uf = "SP"))

FILTRAR — recorta por uma condição

código
FILTRAR(expr)

DIFERE do DAX: o FILTER do DAX recebe tabela + condição; aqui FILTRAR recebe só a condição — o motor já sabe que o "universo" é o visual atual. Fica só com as linhas em que a condição é verdadeira.

formula
CALCULAR(SOMA(valor); FILTRAR(uf = "SP"))

TUDO — ignora o grupo, sem argumento

código
TUDO()

DIFERE do DAX de um jeito que pega muita gente: TUDO() não leva argumento. Significa "o visual inteiro", ponto. O ALL/REMOVEFILTERS do DAX recebem tabela ou coluna — se você escrever TUDO(produtos) aqui, o motor recusa:

formula-errada
CALCULAR(MEDIDA('Receita'); TUDO(produtos))

Erro: TUDO espera 0 argumentos. (Se você viu TUDO(produtos) em algum material — inclusive em alguma doc antiga do próprio produto — está desatualizado: registre como pedido de correção e não copie.) A forma certa, para remover o filtro inteiro, é TUDO() sem nada dentro:

formula
CALCULAR(MEDIDA('Receita'); TUDO())

É o padrão clássico de participação no total:

formula
DIVIDIR(MEDIDA('Receita'); CALCULAR(MEDIDA('Receita'); TUDO()))

TUDO_EXCETO — ignora o grupo, mas preserva uma coluna

código
TUDO_EXCETO(coluna; [arg2]; [arg3]; [arg4])

Compatível com o ALLEXCEPT do DAX: ignora o filtro do grupo menos na(s) coluna(s) informada(s) — dá a "participação dentro da categoria" em vez da participação no total geral.

formula
CALCULAR(MEDIDA('Receita'); TUDO_EXCETO(categoria))
formula
DIVIDIR(MEDIDA('Receita'); CALCULAR(MEDIDA('Receita'); TUDO_EXCETO(categoria)))

Essa segunda fórmula dá a participação de cada produto dentro da sua categoria — diferente da Participação % da seção anterior, que compara contra o total geral.

REMOVER_FILTROS — o espelho do TUDO_EXCETO

código
REMOVER_FILTROS(coluna; [arg2]; [arg3]; [arg4])

Compatível com REMOVEFILTERS: apaga o filtro só na(s) coluna(s) informada(s) e mantém o resto — é o contrário de TUDO_EXCETO, que mantém só a(s) coluna(s) informada(s) e apaga o resto.

formula
CALCULAR(MEDIDA('Receita'); REMOVER_FILTROS(uf))

Numa matriz por uf × categoria, essa fórmula soma todas as UFs, mas continua recortada pela categoria da célula.

MANTER_FILTROS — soma ao filtro, não substitui

código
MANTER_FILTROS(expr)

Compatível com KEEPFILTERS. A diferença fina: um FILTRAR direto dentro de CALCULAR substitui o filtro daquela dimensão; embrulhado em MANTER_FILTROS, ele soma ao filtro do grupo — o recorte do visual continua valendo junto.

formula
CALCULAR(MEDIDA('Receita'); MANTER_FILTROS(FILTRAR(canal = "loja")))

Com uma condição simples sobre uma coluna que já está no eixo, MANTER_FILTROS não muda nada — ela só importa quando o filtro do grupo e o filtro novo podem conflitar.

Os cinco modificadores, lado a lado

ModificadorO que faz com o filtro do grupoEquivalente DAX
FILTRAR(cond)Substitui por uma condiçãoFILTER (semântica diferente)
TUDO()Remove tudo (visual inteiro)ALL/REMOVEFILTERS (sem argumento aqui)
TUDO_EXCETO(col)Remove tudo, EXCETO a(s) coluna(s) citada(s)ALLEXCEPT
REMOVER_FILTROS(col)Remove SÓ a(s) coluna(s) citada(s)REMOVEFILTERS (com coluna)
MANTER_FILTROS(expr)Soma ao filtro do grupo, não substituiKEEPFILTERS

TUDO_EXCETO e REMOVER_FILTROS são opostos: o primeiro diz "só isto fica", o segundo diz "só isto some". Quando as duas colunas do seu visual coincidem, as duas fórmulas dão o mesmo resultado — a diferença aparece quando o visual tem mais de uma dimensão em jogo.

Erros comuns

  • Passar coluna para TUDO() — ela não aceita argumento; para preservar uma coluna, use TUDO_EXCETO.
  • Confundir TUDO_EXCETO(categoria) (mantém categoria, ignora o resto) com REMOVER_FILTROS(categoria) (ignora só categoria, mantém o resto) — são opostos.
  • Esperar que o slicer "vaze" para dentro de uma medida que usa TUDO()/REMOVER_FILTROS — é o comportamento pedido: a medida está deliberadamente ignorando aquele recorte.

Estado da capacidade

A semântica composta do CALCULAR e seus modificadores (C06.2) está em Preview, com precedência determinística entre modificadores — a mesma composição sempre produz o mesmo número, fixado por suíte de testes de referência.

Faça você mesmo#

No workspace de treino Aurora Varejo (abra /dashboards no console):

  1. Na biblioteca de medidas, crie Participação % com DIVIDIR(MEDIDA('Receita'); CALCULAR(MEDIDA('Receita'); TUDO())).
  2. Crie Participação na categoria % com DIVIDIR(MEDIDA('Receita'); CALCULAR(MEDIDA('Receita'); TUDO_EXCETO(categoria))).
  3. Coloque as duas numa tabela por produto e confirme que Participação % soma 100% no total geral, e Participação na categoria % soma 100% dentro de cada categoria.
  4. Experimente digitar TUDO(produtos) no editor e confira a mensagem de erro.

Você terminou quando as duas medidas de participação existirem e você souber explicar, sem olhar a doc, a diferença entre TUDO_EXCETO e REMOVER_FILTROS.

Checagem rápida#

Três perguntas no final da aula, corrigidas no servidor. A aula só conta como concluída depois da checagem.

Documentação relacionada#

Capacidades ensinadas#

C06.2 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".

Carregando seu progresso…