Skip to content

Lição 7: Comparação de períodos ​

Tipo
Tutorial
Para
Analista
Na tela
DataViz › Aplicação › Editar › Expressões
Liberação
Em beta

Lição 7 de 12 do tutorial DAX, nível intermediário, cerca de 10 minutos. Objetivo: comparar cada mês com o mesmo mês do ano anterior.

1. Ano anterior ​

Numa tabela com a coluna Data do Calendário nas linhas, agrupada por mês, crie a medida:

dax
CALCULATE(
    SUM('Vendas'[Faturamento]),
    SAMEPERIODLASTYEAR('Calendário'[Data])
)

Cada mês mostra o faturamento do mesmo mês, um ano antes.

Valores do app de demonstração:

MêsFaturamentoAno anterior
2026-013.854.280,583.669.264,97
2026-023.628.569,503.607.341,00
2026-034.910.233,533.963.213,89
2026-044.393.418,174.268.354,27
2026-054.695.447,084.378.399,12

2. Variação ​

A variação divide a diferença pelo valor do ano anterior. VAR dá nome a cada parte (lição 11):

dax
VAR atual = SUM('Vendas'[Faturamento])
VAR anterior = CALCULATE(SUM('Vendas'[Faturamento]), SAMEPERIODLASTYEAR('Calendário'[Data]))
RETURN DIVIDE(atual - anterior, anterior)

Mês sem venda no ano anterior fica vazio.

3. Acumulado no ano ​

Para somar de janeiro até o mês da linha:

dax
CALCULATE(
    SUM('Vendas'[Faturamento]),
    DATESYTD('Calendário'[Data])
)

Cada mês soma de 1º de janeiro até o último dia dele. Em janeiro, a conta recomeça.

Como funciona ​

As funções de tempo trocam o período de cada linha. A linha de março de 2026 passa a olhar março de 2025.

A data é a coluna Data do calendário ligado à tabela de vendas. Com a data da própria tabela de vendas, a medida é recusada.

Nas linhas vai a coluna Data, agrupada por dia, mês ou ano. Outra coluna do calendário, como Mês, é recusada.

Linha sem venda no período atual não aparece, mesmo com venda no ano anterior.

Em SQL ​

A forma SQL é ${SUM(valor), data BETWEEN SUBYEARS(<data:START, CURRENT_DATE>, 1) AND SUBYEARS(<data:END, CURRENT_DATE>, 1)}. Ela usa o período do filtro de data, um ano antes. Não compara cada linha com o mesmo mês do ano anterior.

Exercício ​

Crie a medida "Mês anterior", com o faturamento do mês inteiro anterior a cada linha.

Mostrar resposta
dax
CALCULATE(
    SUM('Vendas'[Faturamento]),
    PREVIOUSMONTH('Calendário'[Data])
)

Próximos passos ​