Como criar um total acumulado em DAX: passo a passo
Um total acumulado — ou running total — soma os valores de forma progressiva ao longo do tempo: por exemplo, as vendas desde o início do ano até cada dia. É uma das medidas mais pedidas num relatório Power BI, porque transforma uma simples coluna de valores numa linha de evolução fácil de ler. Com o padrão certo em DAX, um total acumulado resolve-se em poucas linhas e funciona com qualquer medida que já tenhas. Este guia mostra como criar um total acumulado em DAX, passo a passo e com um exemplo prático.
Pré-requisitos
- Um modelo no Power BI com uma tabela de factos (por exemplo
Vendas) e uma tabela de calendário (por exemploCalendário). - Uma relação ativa entre
Calendário[Data]e a data da tabelaVendas. - Uma medida base, por exemplo
Total Vendas = SUM(Vendas[Valor]). - Noções básicas de como criar medidas em DAX.
Passo 1: garantir uma tabela de calendário
Um total acumulado precisa de uma coluna de datas contínua, sem "buracos", para poder andar para a frente no tempo. Se ainda não tiveres uma tabela de calendário dedicada, cria uma com CALENDAR e liga-a à tua tabela de vendas.

Calendário =
CALENDAR(DATE(2023, 1, 1), DATE(2026, 12, 31))
A seguir, seleciona a tabela e usa a opção "Marcar como tabela de datas", escolhendo a coluna Data. Este passo é o que garante que os cálculos temporais se comportam como esperado.
Passo 2: criar a medida base
Se ainda não existir, cria a medida que vais acumular. Convém mantê-la simples, porque o total acumulado limita-se a reutilizá-la dentro de um contexto de filtro diferente.
Total Vendas = SUM(Vendas[Valor])
Passo 3: escrever o total acumulado
Chegámos ao padrão principal. A ideia é somar [Total Vendas] para todas as datas até à data do contexto atual. Para isso usamos CALCULATE para redefinir o filtro de datas e FILTER com ALLSELECTED para percorrer todas as datas visíveis no relatório.
Total Acumulado =
CALCULATE(
[Total Vendas],
FILTER(
ALLSELECTED('Calendário'[Data]),
'Calendário'[Data] <= MAX('Calendário'[Data])
)
)
Há dois pormenores que fazem tudo funcionar. MAX('Calendário'[Data]) devolve a última data do contexto atual — ou seja, a data daquela linha do visual. E ALLSELECTED ignora o contexto da linha mas respeita os filtros de segmentação (slicers), para que o acumulado reaja aos filtros do utilizador sem se limitar a uma só data.
Dica: se substituíresALLSELECTEDporALL, o acumulado deixa de respeitar os slicers e passa a considerar sempre todas as datas do modelo.
Passo 4 (opcional): acumulado do ano com TOTALYTD
Se o que precisas é o acumulado desde o início do ano (year-to-date), existe um atalho ainda mais curto com a função TOTALYTD:
Vendas YTD =
TOTALYTD([Total Vendas], 'Calendário'[Data])
A diferença é importante: Total Acumulado soma tudo desde o início dos dados, enquanto Vendas YTD reinicia a cada 1 de janeiro. Escolhe a medida consoante a pergunta de negócio que queres responder.
Verificar o resultado
Cria uma tabela ou um gráfico de linhas com Calendário[Data] (ou o mês) no eixo e adiciona [Total Vendas] e [Total Acumulado] lado a lado. Depois confirma três coisas:
- O
Total Acumuladonunca desce: só sobe ou se mantém de período para período. - O valor na última data coincide com a soma total de
[Total Vendas]. - Ao escolher um ano num slicer, o acumulado ajusta-se ao período selecionado.
Se o acumulado disparar para valores estranhos, o motivo quase certo é faltar marcar o Calendário como tabela de datas, ou a relação com a tabela de vendas estar em falta.
Conclusão
Com um único padrão de CALCULATE + FILTER + ALLSELECTED ficas com um total acumulado que respeita os filtros do relatório, e com TOTALYTD resolves o caso específico do acumulado anual. A partir daqui vale a pena experimentar variantes: acumulado por categoria de produto, média móvel de sete dias ou comparação com o período homólogo. Qual destas vais precisar primeiro no teu próximo relatório?