Nesse post apresento duas medidas para relatórios em Power BI que calculam a variação percentual de séries temporais: uma para variação mensal (Month over Month - MoM) e outra para a variação de um período contra o mesmo período do ano anterior (Year over Year - YoY)
É necessário ter uma tabela Calendário para as medidas funcionarem.
Variação percentual do mês atual contra mês imediatamente anterior (MoM)
% MoM :=
VAR ValorMesAtual =
SUM ( 'FATO'[valor] )
VAR ValorMesAnterior =
CALCULATE ( SUM ( 'FATO'[valor] ), DATEADD ( 'Calendário'[data], -1, MONTH ) )
RETURN
IF (
AND ( ValorMesAtual <> 0, ValorMesAnterior <> 0 ),
DIVIDE ( ValorMesAtual, ValorMesAnterior ) - 1,
BLANK ()
)
Na fórmula da medida MoM, declaro duas variáveis:
ValorMesAtual
: é o valor da série no período atual para usar como numerador da divisão para calcular a variação percentual MoM.ValorMesAnterior
: é o valor da série no período anterior, seja dia, mês ou ano. Para obter esse valor é preciso usar a funçãoCALCULATE
que opera sobre o row context, permitindo contornar os filtros aplicados no relatório. Para que oCALCULATE
retorne o valor do período anterior foi usado a funçãoDATEADD
, usadas para somas de datas.
O retorno da medida é a divisão do ValorMesAtual
sobre ValorMesAnterior
subtraído de 1, ou seja:
$$MoM = \frac{ValorMesAtual}{ValorMesAnterior} - 1$$
Porém, caso ValorMesAtual
e ValorMesAnterior
sejam iguais a zero, a medida retorna blank.
Variação percentual do período atual contra mesmo período do ano anterior (YoY)
% YoY :=
VAR ValorMesAtual =
SUM ( 'FATO'[valor] )
VAR ValorMesAnoAnterior =
CALCULATE ( SUM ( 'FATO'[valor] ), SAMEPERIODLASTYEAR ( 'Calendário'[data] ) )
RETURN
IF (
AND ( ValorMesAtual <> 0, ValorMesAnoAnterior <> 0 ),
DIVIDE ( ValorMesAtual, ValorMesAnoAnterior ) - 1,
BLANK ()
)
A fórmula da medida YoY segue a mesma lógica da medida MoM, apenas diferenciando na função usada para o CALCULATE
retornar o valor no mesmo período do ano anterior.
Nesse caso usou-se o SAMEPERIODLASTYEAR
no campo de filtro do CALCULATE
para a variável ValorMesAnoAnterior
. O retorno da medida então é:
$$YoY = \frac{ValorMesAtual}{ValorMesAnoAnterior} - 1$$