Pular para o conteúdo

SOMAX, MEDIAX, CONTX, JUNTARX, MAXX/MINX

Aula 7 de 138 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: 8 min.

Objetivo: Calcular linha a linha (margem por item)

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

Objetivo#

Ao final desta aula você vai calcular linha a linha (margem por item).

Vídeo#

Identificador no manifesto: acd-320-07-iteradores-x · duração-alvo 8 min · tela do produto: /dashboards.

Roteiro:

#CapítuloMinutagem-alvoRota
1Abertura — quando SOMA(valor - custo) não dá a margem certa00:00–01:00/dashboards
2Transição de contexto, revisitada01:00–02:20/dashboards
3SOMAX, MEDIAX, CONTX, MAXX e MINX — os cinco iteradores numéricos02:20–05:40/dashboards (biblioteca de medidas)
4JUNTARX — texto a partir de várias linhas05:40–06:50/dashboards (editor de fórmulas)
5O 2º argumento FILTRAR(...) dos iteradores06:50–07:30/dashboards (editor de fórmulas)
6Encerramento — "faça você mesmo"07:30–08:00/dashboards

Conteúdo#

Até aqui toda agregação somou uma coluna inteira de uma vez (SOMA(valor)). Os iteradores desta aula fazem diferente: calculam uma expressão linha a linha e só então agregam o resultado — é a transição de contexto da aula 5 em ação, e é a única forma certa de calcular "receita = quantidade × preço" quando quantidade e preço vêm de linhas diferentes dentro do mesmo grupo.

Por que SOMA(valor - custo) não basta

Se valor e custo já estão na mesma linha, SOMA(valor - custo) até funciona (o motor calcula a coluna linha a linha e soma o resultado). Mas se a margem depende de multiplicar duas colunas — quantidade * preco — e o grupo tem várias linhas com quantidade e preco diferentes, só um iterador garante que a multiplicação aconteça dentro de cada linha, antes de agregar.

SOMAX — soma o resultado linha a linha

código
SOMAX(expr; [arg2])

DIFERE do DAX: a tabela virtual do 1º/2º argumento só pode ser FILTRAR(...) — o SUMX do DAX aceita qualquer expressão de tabela.

formula
SOMAX(qtd * preco)
EntradaFórmulaResultado
(q=2,p=10) e (q=3,p=20)SOMAX(q * p)80

Alias: sumx.

MEDIAX, CONTX, MAXX, MINX — a mesma ideia, agregação diferente

código
MEDIAX(expr; [arg2])
CONTX(expr; [arg2])
MAXX(expr; [arg2])
MINX(expr; [arg2])

Todas avaliam a expressão linha a linha e trocam só o jeito de agregar o resultado: média, contagem de linhas com valor não vazio, maior e menor.

formula
MEDIAX(valor - custo)
formula
CONTX(SE(valor - custo > 0; 1))
formula
MAXX(valor - custo)
formula
MINX(valor - custo)

CONTX conta quantas linhas a expressão devolveu um valor não vazio — no exemplo acima, quantos itens deram lucro positivo. MAXX/MINX não têm alias em português além do próprio nome.

JUNTARX — texto, não número

código
JUNTARX(expr; [arg2]; [arg3])

DIFERE do DAX: não tem argumento de ordenação (o CONCATENATEX aceita orderBy). Junta num texto só o resultado de cada linha, com o separador informado.

formula
JUNTARX(categoria; ", ")

O 2º argumento: uma tabela virtual FILTRAR(...)

Com dois argumentos, o primeiro continua sendo a expressão calculada linha a linha; quando você quer um iterador sobre um subconjunto, o segundo argumento precisa ser FILTRAR(...) — passar uma condição solta ali é um erro guiado, não um FILTER com tabela arbitrária como no DAX. Por exemplo, para somar a margem só dos itens do canal loja:

formula
SOMAX(valor - custo; FILTRAR(canal = "loja"))

Um exemplo numérico, passo a passo

Pense em duas linhas do grupo "categoria Bebidas": a primeira com qtd = 2 e preco = 10; a segunda com qtd = 3 e preco = 20. SOMAX(qtd * preco) calcula 2 * 10 = 20 na primeira linha, 3 * 20 = 60 na segunda, e soma: 20 + 60 = 80. Compare com o erro clássico de quem tenta evitar o iterador: SOMA(qtd) * SOMA(preco) daria 5 * 30 = 150 — um número sem relação com a receita real, porque a multiplicação aconteceu depois de somar as colunas inteiras, não linha a linha. Esse é o motivo de existir uma função separada para iterar: a ordem "multiplica, depois soma" só é garantida pela transição de contexto.

As seis funções, resumidas

FunçãoAgrega comoRetorno
SOMAXsomaNúmero
MEDIAXmédiaNúmero
CONTXcontagem de não vaziosNúmero
MAXXmaiorNúmero
MINXmenorNúmero
JUNTARXconcatenação com separadorTexto

Todas compartilham a mesma regra de 2º argumento (FILTRAR(...) quando presente) e a mesma garantia de branco honesto: sem linha no contexto, o resultado é vazio, nunca zero.

Erros comuns

formula-errada
SOMAX(vendas.qtd * vendas.preco)

Mesmo erro da aula 1: coluna sempre pelo nome simples, nunca tabela.coluna — Caractere inesperado: ".".

  • Usar SOMA(qtd * preco) em vez de SOMAX(qtd * preco) — ambas podem até compilar e, em alguns casos, dar o mesmo número, mas só o iterador garante a multiplicação linha a linha quando o grupo tem muitas linhas heterogêneas.
  • Esperar que o 2º argumento aceite uma condição solta — precisa ser FILTRAR(...).

Estado da capacidade

A transição de contexto e os iteradores sobre tabela virtual (C06.3) estão em Preview, cobertos por suíte de testes determinística.

Faça você mesmo#

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

  1. Crie a medida Margem por item com SOMAX(valor - custo).
  2. Compare o resultado com SOMA(valor) - SOMA(custo) — neste caso os dois batem porque a subtração já está na mesma linha; mude a fórmula para SOMAX(qtd * preco) e tente reproduzir sem iterador para sentir a diferença.
  3. Crie MAXX(valor - custo) para achar a venda de maior margem absoluta do grupo.
  4. Monte MEDIAX(valor - custo) para a margem média por linha e JUNTARX(produto; "; ") num cartão, para ver a lista de produtos que compõem o grupo.

Você terminou quando a medida Margem por item existir com SOMAX e você conseguir explicar por que um iterador foi necessário (e não bastava SOMA).

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.3 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".

Carregando seu progresso…