Dashboard · Varejo de moda

Boletim de Ruptura de Lojas

Toda semana, gerentes e coordenadores precisam saber duas coisas: quais produtos estão faltando em cada loja e quais dessas faltas dá para resolver agora, porque existe estoque no CD.

Power BI · DAX · SQL · VBARéplica webDados fictícios
Dados fictícios · 20 lojas · 80 SKUs
Ruptura total (1 dia)…
Ruptura tratável…
SKU-lojas para repor agora…
Venda potencial perdida (7 dias)…

Ruptura por semana: total e tratável

Ruptura por loja

Ruptura por linha de produto

5 lojas detratoras (maior ruptura)

LojaCanalRupturaReporVs sem. ant.

5 lojas promotoras (menor ruptura)

LojaCanalRupturaReporVs sem. ant.

O problema

Uma rede de varejo de moda acompanhava a ruptura das lojas em planilhas. O número geral até existia, mas não respondia a pergunta que importa para o abastecimento: dessas faltas, quais eu consigo resolver nesta semana?

Se o produto acabou na loja e também no CD, não adianta cobrar o time de abastecimento. Se acabou na loja e tem estoque parado no CD, é uma falha de reposição que dá para corrigir agora.

A solução

Um boletim semanal em Power BI, alimentado por uma base preparada com SQL e VBA, com três ideias centrais:

  1. Ruptura total: percentual de combinações SKU-loja zeradas no dia da foto de estoque.
  2. Ruptura tratável: o mesmo cálculo, só para os SKUs que têm estoque no CD. É a parte que o abastecimento consegue resolver.
  3. Ranking de lojas: detratoras e promotoras da semana, para o coordenador saber onde agir primeiro.

Os filtros seguem a forma como o negócio enxerga a operação: canal (loja própria ou franquia), linha de produto (novidade, core, essencial e sazonal), regional e gerente. Produtos em retirada de linha ficam fora da conta, para não inflar a ruptura com itens que não serão repostos.

As medidas principais em DAX

-- % de SKU-lojas zeradas, só entre os itens já recebidos pela loja
% Ruptura 1D =
AVERAGEX(
    FILTER( Ruptura, Ruptura[ESTOQUE_RECEBIDO] = "RECEBIDO" ),
    Ruptura[RUPTURA_1D]
)

-- Mesma conta, só onde existe estoque no CD para repor
% Ruptura Tratável =
CALCULATE( [% Ruptura 1D], Ruptura[ESTOQUE_TRATAVEL] = "TRATAVEL" )

-- Venda potencial perdida: dias em ruptura x potencial de venda do SKU na loja
Valor Ruptura 7D =
SUMX( Ruptura, Ruptura[RUPTURA_7D] * Ruptura[POTENCIAL] )

O resultado

O boletim passou a sair toda semana para gerentes e coordenadores, com o mesmo critério para todas as lojas, e agilizou a priorização do abastecimento das lojas próprias. A ideia é trocar "a ruptura está alta" por "estas lojas têm estes SKUs zerados com estoque no CD".

Sobre esta página: a versão original roda em Power BI com dados internos da empresa, que não podem ser publicados. Aqui está uma réplica fiel da lógica, feita em HTML e JavaScript, com 20 lojas e 80 produtos fictícios gerados no navegador.