Oi, Julia, tudo bem?
Sua dúvida é pertinenete, e toca em dois pontos muito importantes ao usar o Power BI para comparar dados ano a ano. Então irei destrinchar por partes para um melhor entendimento:
1. Por que a função SAMEPERIODLASTYEAR só funciona em janeiro?
Antes de responder essa pergunta, vamos recapitular alguns pontos sobre como essas funções trabalham no DAX.
O que faz o TOTALYTD
?
A função TOTALYTD calcula o acumulado no ano até a data atual. Por exemplo, se o contexto do seu visual é abril de 2016, ela soma de janeiro até abril de 2016. Isso significa que ela entende automaticamente o começo do ano (janeiro) e acumula até o mês corrente no filtro.
O que faz o SAMEPERIODLASTYEAR
?
A função SAMEPERIODLASTYEAR
pega o mesmo intervalo de datas do ano anterior. Porém, aqui está um detalhe crucial: ela não entende acumulado. Ela simplesmente pega o exato conjunto de datas do ano anterior, baseado no contexto de filtro atual.
Se o filtro do visual está em fevereiro de 2016, o SAMEPERIODLASTYEAR
traz apenas fevereiro de 2015, e não de janeiro a fevereiro.
E onde está o problema?
O TOTALYTD
espera um intervalo contínuo desde janeiro até o mês corrente. Quando usamos SAMEPERIODLASTYEAR
dentro do TOTALYTD
, esperamos que ele traga o acumulado de janeiro até aquele mês do ano anterior.
Porém, o que realmente acontece é que SAMEPERIODLASTYEAR
fornece apenas o mês atual do ano anterior, quebrando a lógica de acúmulo do TOTALYTD
. Isso explica por que funciona corretamente apenas em janeiro:
- Em janeiro, tanto o mês corrente quanto o período deslocado são compostos de um único mês (janeiro). Logo, não há diferença perceptível.
- A partir de fevereiro, o
TOTALYTD
de 2016 acumula janeiro + fevereiro, mas o SAMEPERIODLASTYEAR
retorna somente fevereiro de 2015, gerando valores inconsistentes.
Visualizando com um exemplo
Ano | Mês | Vendas Mensais | Vendas YTD | SAMEPERIODLASTYEAR (Mensal) | Esperado (Acumulado LY) |
---|
2015 | Janeiro | 100 | 100 | - | - |
2015 | Fevereiro | 200 | 300 | - | - |
2015 | Março | 300 | 600 | - | - |
2016 | Janeiro | 150 | 150 | 100 | 100 |
2016 | Fevereiro | 250 | 400 | 200 | 300 |
Perceba que a coluna SAMEPERIODLASTYEAR (Mensal)
só pega o mês equivalente (jan pega jan, fev pega fev), enquanto o correto para análise YTD
é acumular os meses (jan + fev + mar).
Ou seja, o SAMEPERIODLASTYEAR
sozinho não tem contexto de acúmulo. Ele apenas desloca o intervalo atual para o ano anterior. Para resolver, é necessário construir uma lógica que leve o TOTALYTD
aplicado diretamente sobre o período deslocado, garantindo que o acúmulo respeite o ano anterior.
Como ajustar isso?
Substitua a medida Periodo Anterior
por esta versão abaixo, que usa DATESYTD
, assim ele entende que precisa acumular desde janeiro no ano anterior:
Periodo Anterior =
CALCULATE(
[Vendas Total],
DATESYTD(
SAMEPERIODLASTYEAR('Tabela Calendário'[Date])
)
)
2. Sobre a margem negativa mesmo com aumento nas vendas.
Você está certa ao estranhar esse ponto, e mesmo fazendo os ajustes acima, ela trará resultados negativos, pois a nossa medida YoY %
estamos usando [Vendas Total]
, que não é acumulada, ou seja, é apenas o valor do mês atual isolado, não o acumulado do ano.
Então, como o valor do mês atual (não acumulado) é menor que o acumulado do ano anterior, o resultado da fórmula fica negativo, mesmo o acumulado total do ano sendo maior.
Para ajustar você pode seguir utilizar [Vendas TOTALYTD]
na comparação. Ficaria assim:
YoY % =
DIVIDE(
[Vendas TOTALYTD] - [Periodo Anterior],
[Periodo Anterior]
)
Resultado:
Espero ter ajudado.
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!