Como calcular rotatividade de inventário em DAX: passo a passo
Vamos calcular a rotatividade de inventário em DAX para medir quantas vezes o inventário é vendido num período. Esta métrica ajuda a avaliar a eficiência do stock, a detetar excesso ou falta de inventário e a apoiar decisões de reposição e price setting. Em termos práticos, uma rotatividade mais elevada normalmente indica que o negócio está a converter stock em vendas com rapidez; uma rotatividade muito baixa pode revelar excesso de stock ou produtos de baixa rotação.
Pré-requisitos
- Power BI Desktop com um modelo simples: tabelas Sales (vendas) e Inventory (inventário) e uma Date table. Ex.: Sales com colunas Sales[SalesAmount], Sales[COGS], Sales[Date], Sales[ProductID]; Inventory com Inventory[StockValue], Inventory[Date], Inventory[ProductID].
- Relacionamentos: Sales[Date] -> Date[Date]; Inventory[Date] -> Date[Date]; Sales[ProductID] -> Inventory[ProductID]. Garantir que a Date table é marcada como Date table para a Time Intelligence funcionar.
- Noções básicas de DAX: medidas, CALCULATE, SUM, AVERAGE e FILTER. É ideal ter também consciência dos níveis de granularidade (por produto, por dia, por mês).
Passo 1: Entender a fórmula da rotatividade de inventário
A rotatividade de inventário (Inventory Turnover) normalmente = Custo das Vendas (COGS) / Inventário Médio. Se não tiver COGS, pode usar Vendas (Revenue) como proxy — lembrando que isso altera a interpretação. Inventário Médio é frequentemente a média entre inventário no início e no fim do período, ou a média diária se houver registos por dia.
Exemplo prático: se num ano o Total COGS = 200.000€ e o Inventário Médio = 50.000€, então Inventory Turnover = 200.000 / 50.000 = 4. Ou seja, o stock «rodou» 4 vezes nesse ano. Para converter em Days Inventory Outstanding (DIO): DIO = 365 / 4 = 91,25 dias.
Passo 2: Criar medidas base (Sales e COGS)
Comece por criar medidas para o total de vendas e, se existir, COGS. Estas medidas servem de numerador na fórmula. Verifique unidades (moeda) e que não está a somar valores duplicados por erro de modelo.
Total Sales = SUM(Sales[SalesAmount])
Total COGS = SUM(Sales[COGS])
Boas práticas: utilize FORMAT apenas em visuais. Mantenha medidas numéricas sem texto para poderem ser usadas em cálculos posteriores. Se o seu COGS estiver numa tabela separada, crie relacionamentos ou utilize CALCULATE com USERELATIONSHIP se necessário.
Passo 3: Criar medida de inventário diário ou de fim de período
Se a tabela Inventory tem registos diários por produto, é preferível calcular o Inventário Médio diário. Se só tiver levantamentos mensais, pode usar o stock do último dia do mês (closing stock).
Closing Inventory =
CALCULATE(
SUM(Inventory[StockValue]),
LASTDATE(Date[Date])
)
Esta medida devolve o stock no último dia do contexto de filtro (mês, trimestre, etc.). Ex.: no contexto do mês de março, se o último dia com registo for 31/03 e o stock total for 120.000€, Closing Inventory = 120.000€.
Passo 4: Medida de Inventário Médio simples (início + fim)
Se tiver registos de stock por dia, calcule o Inventário Médio como a média do inventário diário no período via AVERAGEX sobre dias. Isto dá uma estimativa mais estável, sobretudo quando há variações diárias significativas.
Average Inventory (Daily) =
AVERAGEX(
VALUES(Date[Date]),
CALCULATE(SUM(Inventory[StockValue]))
)
Exemplo: se durante um mês os valores diários do stock total forem 40k, 42k, 38k, … a média diária poderá situar‑se nos 41k. Para períodos mensais, esta média é mais representativa do que apenas o stock de fecho.
Passo 5: Medida de rotatividade de inventário (com COGS)
Agora combine as medidas: rotatividade = COGS / Inventário Médio. Utilize DIVIDE para evitar divisão por zero e para controlar o valor retornado quando o denominador for zero.
Inventory Turnover =
DIVIDE(
[Total COGS],
[Average Inventory (Daily)],
BLANK()
)
-- Se usar Closing Inventory como proxy:
Inventory Turnover (Closing) =
DIVIDE(
[Total COGS],
[Closing Inventory],
BLANK()
)
Exemplo numérico: Total COGS (mês) = 50.000€, Average Inventory (Daily) = 12.500€ → Inventory Turnover = 4. Se o denominador for zero, DIVIDE devolve BLANK() por defeito; pode substituir por 0 se preferir.
Passo 6: Ajustes por período e comparações (ex.: anual ou mensal)
Normalmente calcula‑se a rotatividade por ano ou por mês. Use a Date table e funções de Time Intelligence para comparar períodos. Por exemplo, use TOTALYTD para somar COGS até ao fim do ano e compare com a média de inventário do período correspondente.
Total COGS YTD =
TOTALYTD([Total COGS], Date[Date])
Inventory Turnover YTD =
DIVIDE(
[Total COGS YTD],
[Average Inventory (Daily)],
BLANK()
)
Considere também calcular médias móveis (3 meses, 12 meses) para suavizar a sazonalidade. Ex.: uma rotatividade média móvel de 12 meses será menos sensível a picos sazonais nas vendas.
Verificar o resultado
Crie um visual de tabela no Power BI com Date[Year] ou Date[Month] e as medidas: Total COGS, Average Inventory (Daily) e Inventory Turnover. Verifique se os valores fazem sentido: rotatividade muito alta (>12) pode indicar stock insuficiente (ex.: retalho rápido como supermercados tem valores elevados), rotatividade moderada (3–6) é comum em eletrónica, e muito baixa (<1) indica excesso de stock (ex.: mobiliário tende a ter valores baixos). Teste com filtros por ProductID para confirmar por produto. Se um produto tiver Inventory Turnover de 0, investigue os dados em Inventory ou o relacionamento entre tabelas.
Conclusão
Depois de implementar estas medidas pode comparar a rotatividade por período, produto ou categoria e tomar decisões de reposição, pricing e promoções. Próximo passo: ajustar o Inventory Average para média ponderada por vendas, calcular Days Inventory Outstanding (DIO = 365 / Turnover) ou preparar alertas quando a rotatividade cair abaixo de um limiar. Dica prática: utilize sempre DIVIDE para evitar erros de divisão por zero e valide os pressupostos sobre COGS vs Revenue — se usar Revenue como proxy, documente a limitação, porque margens diferentes afectam a interpretação.