Olá amantes dos dados! Estava estudando decomposição temporal em data science e achei o conceito muito útil para diversas aplicações no Power BI. Entretanto sei que não são todos que conseguem pagar uma licença do Power BI Pro para publicar relatórios em com Scripts em Python e R. Assim sendo elaborei uma forma de realizar a decomposição temporal usando apenas DAX. Veja o Relatório abaixo.
Estas são as fórmulas utilizadas:
Observação:
Observed = COUNT(chamados[status]) + 0
Tendência:
Trend =
VAR D0 = MAX('mCalendário'[Data])
VAR MediaMovel = CALCULATE(
DIVIDE([Observed], 7, BLANK()),
DATESINPERIOD ('mCalendário'[Data], D0, - 7, DAY )
)
Return
IF(
Count('mCalendário'[Data])=0,
BLANK(),
IF(
HASONEVALUE('mCalendário'[Data]),
MediaMovel, 0
)
)
Sazonalidade:
Seasonal =
VAR DiaDaSemana = SELECTEDVALUE('mCalendário'[DiaSemana])
VAR contexto = FILTER(ALLSELECTED('mCalendário'), [DiaSemana]=DiaDaSemana)
VAR SzComErro = SUMMARIZE(
ALLSELECTED('mCalendário'),
[DiaSemana],
"SazonalidadeSemana", AVERAGEX(
ALLSELECTED('mCalendário'),
DIVIDE([Observed],[Trend],BLANK())
)
)
VAR Erro = CALCULATE(
AVERAGEX(SzComErro, [SazonalidadeSemana])
)
VAR SAZONALIDADE = CALCULATE(
DIVIDE(
AVERAGEX(
contexto,
DIVIDE([Observed],[Trend],BLANK())
),
Erro, BLANK()
)
)
RETURN
SAZONALIDADE
Ciclico + Erro ou Aleatório:
Random =
CALCULATE(
DIVIDE(DIVIDE(
[Observed],
[Trend], BLANK()),
[Seasonal]
)
)
Espero que isso possa ser útil à você! 😃