Parte da nossa série Supply Chain & Procurement
Leia o guia completoAnálise de inventário com Power BI: estoque, giro e demanda
O excesso de estoque custa 25-30% de seu valor anualmente em custos de manutenção. As rupturas de estoque custam aos varejistas cerca de US$ 1 trilhão em vendas perdidas a cada ano. Entre esses dois extremos está a faixa estreita do estoque ideal — e o Power BI é a ferramenta que mantém as equipes de operações precisamente nessa linha.
O desafio da análise de inventário no Power BI é que o estoque é uma medida instantânea (quanto temos agora?) Em vez de uma medida de fluxo (quanto foi vendido este mês?). Essa distinção orienta todas as decisões de design no modelo de dados e todos os padrões de cálculo DAX. Este guia cobre a plataforma completa de análise de estoque: modelo de dados, classificação ABC, análise de rotatividade, cálculos de pontos de reabastecimento e visualizações de previsão de demanda.
Principais conclusões
- O estoque é uma medida pontual (instantâneo) que exige padrões DAX diferentes das métricas de vendas
- A análise ABC classifica os itens por contribuição de receita: A (80% superiores), B (15% seguintes), C (5% inferiores).
- Giro de estoque = CPV / Estoque médio - varia drasticamente de acordo com o setor
- Ponto de novo pedido = (uso médio diário × prazo de entrega) + estoque de segurança
- A função DAX RANKX alimenta a classificação ABC automaticamente à medida que os dados mudam
- A previsão de demanda no Power BI usa regressão linear via integração DAX ou Azure ML
- A identificação de estoque lento e obsoleto (SLOB) economiza custos de manutenção significativos
- O Power BI se conecta a tabelas de inventário ERP (Odoo, SAP, NetSuite) sem movimentação de dados
Modelo de dados para análise de estoque
Tabelas de inventário principal
Inventory_Snapshot (uma linha por item por dia/semana — níveis de estoque pontuais):
| Coluna | Descrição |
|---|---|
| CÓDIGO0 | Data da contagem de existências |
| CÓDIGO0 | FK para dimensão Item/Produto |
| CÓDIGO0 | FK para Armazém/Local |
| CÓDIGO0 | Quantidade de existências físicas |
| CÓDIGO0 | Quantidade em OP abertas |
| CÓDIGO0 | Quantidade comprometida com pedidos em aberto |
| CÓDIGO0 | QoH - Reservado |
| CÓDIGO0 | Custo médio ou padrão |
| CÓDIGO0 | QuantidadeOnHand × Custo Unitário |
Inventory_Movements (uma linha por transação de estoque):
| Coluna | Descrição |
|---|---|
| CÓDIGO0 | ID da transação |
| CÓDIGO0 | FK para item |
| CÓDIGO0 | FK para localização |
| CÓDIGO0 | Data do movimento |
| CÓDIGO0 | Recebimento, Venda, Transferência, Ajuste, Devolução |
| CÓDIGO0 | Quantidade movimentada (positiva = entrada, negativa = saída) |
| CÓDIGO0 | Custo por unidade no momento do movimento |
Sales_Lines (uma linha por linha de pedido de vendas para análise de demanda):
OrderID,ItemID,OrderDate,ShipDate,Quantity,UnitPrice,Revenue,CustomerID
Purchase_Orders (para análise de prazo de entrega e aquisição):
POID,ItemID,OrderDate,ExpectedDate,ReceiptDate,Quantity,UnitCost
Dim_Item (dimensão do produto):
ItemID,SKU,Name,Category,SubCategory,Supplier,LeadTimeDays,ReorderPoint,SafetyStock,UnitCost,ListPrice,IsActive
Principais KPIs de inventário com DAX
Medidas de nível de estoque
// Current Stock on Hand (point-in-time)
Stock on Hand =
CALCULATE(
SUM(Inventory_Snapshot[QuantityOnHand]),
Inventory_Snapshot[SnapshotDate] = MAX(Inventory_Snapshot[SnapshotDate])
)
// Stock Value (current)
Stock Value =
CALCULATE(
SUM(Inventory_Snapshot[StockValue]),
Inventory_Snapshot[SnapshotDate] = MAX(Inventory_Snapshot[SnapshotDate])
)
// Available to Promise (ATP)
Available to Promise =
CALCULATE(
SUM(Inventory_Snapshot[QuantityAvailable]),
Inventory_Snapshot[SnapshotDate] = MAX(Inventory_Snapshot[SnapshotDate])
)
// Stock on Order (incoming POs)
Stock on Order =
CALCULATE(
SUM(Inventory_Snapshot[QuantityOnOrder]),
Inventory_Snapshot[SnapshotDate] = MAX(Inventory_Snapshot[SnapshotDate])
)
// Projected Stock (current + on order - reserved)
Projected Stock = [Stock on Hand] + [Stock on Order] - [Stock Reserved]
Giro de estoque
// COGS in Period (for turnover denominator)
Total COGS =
SUMX(
FILTER(Inventory_Movements, Inventory_Movements[MovementType] = "Sale"),
Inventory_Movements[Quantity] * Inventory_Movements[UnitCost]
)
// Average Inventory Value (beginning + ending / 2)
Avg Inventory Value =
AVERAGEX(
VALUES(Date[Month]),
CALCULATE(
SUM(Inventory_Snapshot[StockValue]),
Inventory_Snapshot[SnapshotDate] = MAX(Inventory_Snapshot[SnapshotDate])
)
)
// Inventory Turnover Ratio
Inventory Turnover =
DIVIDE([Total COGS], [Avg Inventory Value], 0)
// Days Inventory Outstanding (DIO)
Days Inventory Outstanding =
DIVIDE(365, [Inventory Turnover], 0)
// Benchmark comparison (industry varies widely)
// Manufacturing: 6-12x | Retail: 4-6x | Electronics: 8-15x
Turnover vs Benchmark =
[Inventory Turnover] -
LOOKUPVALUE(
Industry_Benchmark[InventoryTurnover],
Industry_Benchmark[Category],
SELECTEDVALUE(Dim_Item[Category])
)
Análise ABC
A análise ABC classifica os itens de estoque por sua contribuição de receita ou custo:
- Itens A: Principais 80% da receita/CPV — alta prioridade, controle rígido
- Itens B: Próximos 15% — controle moderado
- Itens C: 5% inferiores — supervisão mínima
// Revenue contribution per item (last 12 months)
Item Revenue 12M =
CALCULATE(
SUM(Sales_Lines[Revenue]),
DATESINPERIOD(Date[Date], TODAY(), -12, MONTH)
)
// Cumulative revenue % (for ABC cutoff)
Cumulative Revenue % =
DIVIDE(
SUMX(
FILTER(
ALL(Dim_Item),
RANKX(ALL(Dim_Item), [Item Revenue 12M], , DESC) <=
RANKX(ALL(Dim_Item), [Item Revenue 12M], , DESC)
),
[Item Revenue 12M]
),
CALCULATE([Item Revenue 12M], ALL(Dim_Item)),
0
)
// ABC Classification (calculated column in Dim_Item, refreshed periodically)
ABC Class =
VAR CumPct = [Cumulative Revenue %]
RETURN
SWITCH(TRUE(),
CumPct <= 0.80, "A",
CumPct <= 0.95, "B",
"C"
)
// ABC Summary measure
A Items Count = CALCULATE(COUNTROWS(Dim_Item), Dim_Item[ABC Class] = "A")
A Items Revenue % = DIVIDE(
CALCULATE([Item Revenue 12M], Dim_Item[ABC Class] = "A"),
CALCULATE([Item Revenue 12M], ALL(Dim_Item)),
0
)
Matriz ABC-XYZ
Estenda a classificação ABC com XYZ para variabilidade de demanda:
- X: Baixa variabilidade de demanda (CV < 0,5) — previsível, plano para eficiência
- Y: Variabilidade média (CV 0,5-1,0) — alguma incerteza
- Z: Alta variabilidade (CV > 1,0) — imprevisível, plano para nível de serviço
// Coefficient of Variation for demand variability
Demand CV =
DIVIDE(
STDEV.P(Sales_Lines[Quantity]),
AVERAGE(Sales_Lines[Quantity]),
0
)
// XYZ Classification
XYZ Class =
SWITCH(TRUE(),
[Demand CV] < 0.5, "X",
[Demand CV] < 1.0, "Y",
"Z"
)
O segmento AX (alta receita, demanda previsível) recebe o gerenciamento de pedidos mais rigoroso. O segmento CZ (receita baixa, imprevisível) é um candidato à eliminação ou produção sob encomenda.
Ponto de reabastecimento e cálculos de estoque de segurança
Fórmula de ponto de reordenamento
Ponto de novo pedido = (uso médio diário × prazo de entrega) + estoque de segurança
// Average Daily Usage (last 90 days)
Avg Daily Usage =
DIVIDE(
CALCULATE(
SUM(Sales_Lines[Quantity]),
DATESINPERIOD(Date[Date], TODAY(), -90, DAY)
),
90,
0
)
// Reorder Point calculation
Calculated Reorder Point =
ROUND(
[Avg Daily Usage] * AVERAGE(Dim_Item[LeadTimeDays]) +
Dim_Item[SafetyStock],
0
)
// Below Reorder Point flag
Below Reorder Point =
IF([Stock on Hand] < [Calculated Reorder Point], "Reorder Required", "OK")
// Days of Supply remaining
Days of Supply =
DIVIDE([Stock on Hand], [Avg Daily Usage], 0)
// Stockout Risk Score (0-100)
Stockout Risk =
SWITCH(TRUE(),
[Days of Supply] < 7, 100, -- Critical
[Days of Supply] < 14, 75, -- High risk
[Days of Supply] < 30, 50, -- Medium risk
[Days of Supply] < 60, 25, -- Low risk
0 -- OK
)
Cálculo do estoque de segurança
// Safety Stock using statistical method
// SS = Z-score × σ(demand) × √Lead Time
Safety Stock Calculated =
VAR ZScore = 1.645 -- 95% service level
VAR DemandStdDev = STDEV.P(Sales_Lines[Quantity]) -- per day
VAR LeadTime = AVERAGE(Dim_Item[LeadTimeDays])
RETURN ROUND(ZScore * DemandStdDev * SQRT(LeadTime), 0)
Inventário lento e obsoleto (SLOB)
Identificar o estoque SLOB é fundamental para a otimização do capital de giro:
// Days Since Last Sale
Days Since Last Sale =
DATEDIFF(
CALCULATE(
MAX(Sales_Lines[OrderDate]),
ALL(Date)
),
TODAY(),
DAY
)
// SLOB Classification
SLOB Class =
SWITCH(TRUE(),
[Days Since Last Sale] > 365, "Obsolete",
[Days Since Last Sale] > 180, "Slow Moving",
[Days Since Last Sale] > 90, "At Risk",
"Active"
)
// SLOB Inventory Value
SLOB Value =
CALCULATE(
[Stock Value],
Dim_Item[SLOB Class] IN {"Slow Moving", "Obsolete"}
)
// SLOB as % of total inventory
SLOB % =
DIVIDE([SLOB Value], [Stock Value], 0)
Visualização de previsão de demanda
O Power BI pode visualizar previsões de demanda usando:
Previsão integrada (painel de análise)
Clique com o botão direito em um gráfico de linhas → painel Análise → Previsão:
- Duração da previsão: 12 meses
- Intervalo de confiança: 95%
- Sazonalidade: detecção automática
Isso usa o algoritmo Exponential Smoothing (ETS) – adequado para padrões de demanda estacionários simples.
Previsão linear DAX personalizada
// Simple Linear Regression Forecast
Demand Forecast =
VAR LastPeriod = MAX(Date[MonthNum])
VAR ForecastPeriod = LastPeriod + 1 -- Next month
VAR N = COUNTROWS(VALUES(Date[Month]))
VAR SumX = SUMX(VALUES(Date[MonthNum]), Date[MonthNum])
VAR SumY = SUMX(VALUES(Date[Month]), [Monthly Sales Qty])
VAR SumXY = SUMX(VALUES(Date[Month]), Date[MonthNum] * [Monthly Sales Qty])
VAR SumX2 = SUMX(VALUES(Date[MonthNum]), Date[MonthNum]^2)
VAR Slope = DIVIDE(N*SumXY - SumX*SumY, N*SumX2 - SumX^2, 0)
VAR Intercept = DIVIDE(SumY - Slope*SumX, N, 0)
RETURN Intercept + Slope * ForecastPeriod
Previsão de demanda do Azure ML
Para uma previsão de procura sofisticada, integre o Azure Machine Learning:
- Treine um modelo Profeta ou ARIMA em dados históricos de demanda no Azure ML
- Implantar como um serviço web do Azure ML
- Chamada de fluxos de dados do Power BI usando a integração do AI Insights
- Valores de previsão de superfície como uma coluna na dimensão do item
Arquitetura do painel de inventário
Página 1: Resumo do inventário executivo
- Valor total do estoque (cartão KPI com variação mensal)
- Rotatividade de estoque (medidor vs benchmark do setor)
- Dias de estoque pendente (KPI com tendência)
- Contagem de itens em falta (cartão de alerta, vermelho se >0)
- Valor SLOB (KPI com % do total)
- Valor do estoque por categoria (treemap)
- Alertas de novo pedido (tabela: item, QoH, ponto de novo pedido, dias de fornecimento)
Página 2: Análise ABC
- Gráfico de Pareto (itens classificados por receita, % acumulada)
- Distribuição ABC (gráfico de rosca: contagem e valor por classe)
- Matriz ABC-XYZ (gráfico de dispersão: receita em X, CV em Y, tamanho da bolha = valor do estoque)
- Tabela de itens principais A (item, receita, giro, valor do estoque, margem)
Página 3: Monitoramento de estoque
- Mapa de calor do nível de estoque (localização × categoria)
- Itens abaixo do ponto de reabastecimento (tabela com cor de risco de ruptura de estoque)
- Cronograma de pedido de entrada (Gantt ou gráfico de barras)
- Análise da idade do estoque (gráfico de barras: 0-30, 30-60, 60-90, 90+ dias)
Página 4: Demanda e Previsão
- Demanda real versus previsão (gráfico de linhas com previsão sombreada)
- Variabilidade da demanda por categoria (box plot ou barra com barras de erro)
- Padrões de demanda sazonal (mapa de calor: meses × dia da semana)
- Os 20 principais movimentos rápidos (gráfico de barras por unidades vendidas semanalmente)
Perguntas frequentes
Qual é a melhor maneira de conectar o Power BI a um ERP para dados de inventário?
O método de conexão depende do seu ERP. Para Odoo, conecte-se diretamente ao PostgreSQL em uma réplica de leitura. Para SAP, use o conector SAP HANA com visualizações de CDS de inventário. Para NetSuite, use o ODBC do SuiteAnalytics Connect. Para o Dynamics 365 Business Central, use o conector Business Central. Para todas as conexões de ERP, use uma conta de usuário de análise dedicada com acesso somente leitura às tabelas de inventário e agende atualizações fora dos horários de pico para minimizar a carga do ERP.
Como lidar com o inventário de vários armazéns no Power BI?
Adicione uma dimensão Localização ao seu modelo de dados com atributos como nome do armazém, cidade, país e tipo (centro de distribuição, loja de varejo, etc.). Todas as linhas do instantâneo de inventário incluem um LocationID. Crie medidas que agreguem todos os locais ou filtre por local selecionado por meio da segmentação. Para análise de transferência entre armazéns, a tabela Inventory_Movements com MovementType = "Transfer" rastreia a movimentação de estoque entre locais.
O que é um bom índice de giro de estoque?
Depende muito da indústria. Eletrônicos: 8-15x (alta velocidade, margens baixas). Mercearia/FMCG: 15-30x. Peças automotivas: 3-6x. Varejo de moda: 4-8x (sazonal). Fabricação industrial: 3-8x. Compare sua taxa de rotatividade com o benchmark do setor, em vez de com uma meta genérica. Um índice “ideal” equilibra o nível de serviço (evitar rupturas de estoque) com o custo de manutenção (evitar excessos).
O Power BI pode prever quando ficarei sem estoque?
Sim — a medida “Dias de Fornecimento” calcula quantos dias o estoque atual cobre com a taxa média diária de vendas. Quando esse valor fica abaixo do prazo de entrega + reserva de estoque de segurança, o Power BI pode sinalizar o item como em risco e mostrá-lo em uma tabela de alerta de novo pedido. Para o estoque preditivo, integre a previsão de demanda do Azure ML para projetar vendas futuras e calcular quando o risco de ruptura de estoque se torna crítico com base na demanda prevista e não na histórica.
Como devo visualizar a antiguidade do inventário no Power BI?
Use um gráfico de barras empilhadas mostrando a porcentagem do valor do estoque em cada intervalo de idade (0-30 dias, 31-60, 61-90, 91-180, 180+ dias). O vencimento é calculado a partir da data de recebimento do lote mais antigo. Acompanhe essa tendência ao longo do tempo para ver se o seu perfil de envelhecimento está melhorando (movendo-se para estoque mais fresco) ou deteriorando (acumulando estoque mais antigo). Destaque o estoque com mais de 90 dias em vermelho como um indicador de risco SLOB.
Próximas etapas
A análise de inventário eficaz no Power BI reduz os custos de manutenção, evita rupturas de estoque e melhora o fluxo de caixa — as três métricas mais importantes para a cadeia de suprimentos e a liderança de operações. Acertar o modelo de dados (níveis de estoque baseados em instantâneos, análise de fluxo baseada em movimentos) é a base sobre a qual todo o resto se baseia.
A equipe de Power BI da ECOSIRE cria painéis de cadeia de suprimentos e inventário conectados aos seus sistemas ERP — Odoo, SAP, NetSuite, Dynamics 365 e outros. Implementamos análise ABC, sistemas de alerta de reordenamento e visualização de previsão de demanda como painéis prontos para produção.
Explore nossos serviços de desenvolvimento de painel do Power BI para implementação de análise da cadeia de suprimentos ou entre em contato com nossa equipe para discutir suas fontes de dados de inventário e requisitos de análise.
Escrito por
ECOSIRE Research and Development Team
Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.
Artigos Relacionados
Building Financial Dashboards with Power BI
Step-by-step guide to building financial dashboards in Power BI covering data connections to accounting systems, DAX measures for KPIs, P&L visualisations, and best practices.
Blockchain for Supply Chain Transparency: Beyond the Hype
A grounded analysis of blockchain in supply chains—what actually works, real-world deployments, traceability use cases, and how to evaluate blockchain for your business.
Case Study: Power BI Analytics for Multi-Location Retail
How a 14-location retail chain unified their reporting in Power BI connected to Odoo, replacing 40 spreadsheets with one dashboard and cutting reporting time by 78%.
Mais de Supply Chain & Procurement
Blockchain for Supply Chain Transparency: Beyond the Hype
A grounded analysis of blockchain in supply chains—what actually works, real-world deployments, traceability use cases, and how to evaluate blockchain for your business.
ERP for Agriculture: Farm Management and Supply Chain
Complete guide to ERP for agriculture — farm management, crop tracking, supply chain integration, compliance reporting, and precision agriculture for 2026.
ERP for Government: Procurement, Finance, and Citizen Services
How ERP systems modernize government operations by automating procurement, fund accounting, grants management, and citizen service delivery with full auditability.
ERP for Logistics: 3PL and 4PL Operations Management
Complete guide to ERP for logistics providers — 3PL and 4PL operations management, WMS integration, customer billing, and supply chain visibility for 2026.
Warehouse Automation with ERP: Efficiency and ROI Analysis
Quantify warehouse automation ROI with ERP integration — labor savings, throughput improvement, inventory accuracy, and technology investment frameworks for 2026.
Odoo Inventory and Warehouse Management Deep Dive
Complete guide to Odoo 19 Inventory: multi-warehouse setup, lot tracking, reordering rules, putaway strategies, and warehouse operations.