Análise YoY e MoM no SQL

Wesley Muller
3 min readOct 18, 2023

--

Foto de Carlos Muza na Unsplash

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.

--

--

Wesley Muller
Wesley Muller

Written by Wesley Muller

Sou formado em engenharia elétrica e pós-graduado em analytics. Aqui falo sobre análise de dados e de negócios 📊📈.