Análise YoY e MoM no SQL
Esse tipo de análise consiste na comparação de período a período e é usual na verificação do desempenho de várias métricas:
- a métrica cresceu? Diminuiu?
- qual foi a variação ao longo do período analisado?
São tão comuns, que existem nomes para identificá-las ( YoY e MoM) e auxiliam muito na comparação de vendas, entrada num fluxo de contratação, receita, lucro, churn de clientes, turnover e qualquer outra métrica que faça sentido para o negócio.
Realizar a comparação entre dados de um período de tempo com os dados de um período semelhante é uma maneira útil de identificar sazonalidade e outras flutuações no intervalo analisado.
Mas afinal, o que significa cada uma delas?
MoM (month-over-month): ajuda na comparação de resultados do mês atual com o anterior e permite analisar a evolução da métrica nesse período.
YoY (year-over-year): é muito semelhante ao MoM, mas ao invés de comparar o mês atual e o anterior, compara o ano atual e o anterior. Há ainda a possibilidade de se avaliar um mês atual, com o mesmo mês no ano anterior.
Exemplificando isso, pense numa situação onde você trabalha numa loja e é percebida a diminuição do lucro no mês de julho. Uma maneira de verificar se não se trata de uma sazonalidade ou outra variação esperada, compara-se o mês de julho desse ano com o julho do ano passado.
Mas antes de ir para o código no SQL, vamos fazer uma pausa para lembrar uma função que será necessária para análise.
Função LAG
Pertencente a categoria das funções de janela, a função LAG possibilita o acesso do conteúdo de uma linha anterior. Trata-se de uma função muito útil para realização de comparações de sequências e análise de séries temporais.
A sintaxe básica da função:
LAG(expressao ,offset,valor_padrao) OVER(ORDER BY colunas)
expressao
é o nome da coluna em que se quer obter o valor anterior;offset
é o número de linhas que a função deslocará a partir da linha atual;valor_padrao
é o valor que será retornado se o valor da linha estiver vazio. É bastante útil para evitar valores nulos e é um parâmetro opcional;
Por ser uma função de janela, requer o uso do OVER( ) e ORDER BY. Este último é muito importante para determinar qual linha é a linha anterior. Ainda, é possível utilizar o PARTITION BY para particionar os resultados em grupos com base em uma determinada coluna.
Feita a rápida explicação, agora voltemos ao código.
Cálculo do MoM
Para calcular as vendas realizadas em uma loja, fazemos:
SELECT
sales_month
,sales
,LAG(sales, 1, 0) OVER (ORDER BY sales_month) AS mom
FROM consumers_sales
;
Aqui estamos considerando que já exista uma coluna de mês da venda. Caso não haja, será necessário agregar as vendas a nível mensal
Para o cálculo do valor percentual:
SELECT
sales_month
,((sales/LAG(sales,1) OVER (ORDER BY sales_month))*100) AS pct_mom
FROM consumers_sales
;
Cálculo do YoY
Para o year-over-year o código SQL é idêntico, o que muda, é que as vendas estão agregadas no nível anual:
SELECT
sales_year
,sales
,LAG(sales, 1, 0) OVER (ORDER BY sales_year) AS yoy
FROM consumers_sales
;
Para o cálculo percentual:
SELECT
sales_month
,((sales/LAG(sales,1) OVER (ORDER BY sales_month))*100) AS pct_yoy
FROM consumers_sales
;
Isso é tudo pessoal!!!
Espero muito que esse texto possa enriquecer suas análises e, de alguma forma, te ajudar 🙌😁.
Para conectar comigo no Linkedin, esse aqui é o link. Para me seguir aqui no Medium, é nesse aqui.