Parte de nuestra serie Supply Chain & Procurement
Leer la guía completaAnálisis de inventario con Power BI: stock, facturación y demanda
El exceso de inventario cuesta entre el 25 y el 30% de su valor anualmente en costos de mantenimiento. Los desabastecimientos cuestan a los minoristas aproximadamente 1 billón de dólares en ventas perdidas cada año. Entre estos dos extremos se encuentra la estrecha banda del inventario óptimo, y Power BI es la herramienta que mantiene a los equipos de operaciones precisamente en esa línea.
El desafío con el análisis de inventario en Power BI es que el stock es una medida instantánea (¿cuánto tenemos ahora?) en lugar de una medida de flujo (¿cuánto se vendió este mes?). Esta distinción impulsa cada decisión de diseño en el modelo de datos y cada patrón de cálculo DAX. Esta guía cubre la plataforma completa de análisis de inventario: modelo de datos, clasificación ABC, análisis de rotación, cálculos de puntos de reorden y visualizaciones de pronóstico de demanda.
Conclusiones clave
- El inventario es una medida de un momento determinado (instantánea) que requiere patrones DAX diferentes a los de las métricas de ventas.
- El análisis ABC clasifica los artículos por contribución a los ingresos: A (80% superior), B (15% siguiente), C (5% inferior).
- Rotación de inventario = COGS / Inventario promedio: varía dramáticamente según la industria
- Punto de reorden = (Uso diario promedio × Plazo de entrega) + Stock de seguridad
- La función DAX RANKX potencia la clasificación ABC automáticamente a medida que cambian los datos
- La previsión de la demanda en Power BI utiliza regresión lineal a través de la integración de DAX o Azure ML
- La identificación de inventarios obsoletos y de movimiento lento (SLOB) ahorra costos de mantenimiento significativos
- Power BI se conecta a tablas de inventario de ERP (Odoo, SAP, NetSuite) sin movimiento de datos
Modelo de datos para análisis de inventario
Tablas de inventario principal
Inventory_Snapshot (una fila por artículo por día/semana - niveles de existencias en un momento dado):
| Columna | Descripción |
|---|---|
| CÓDIGO0 | Fecha del recuento de existencias |
| CÓDIGO0 | FK a dimensión de artículo/producto |
| CÓDIGO0 | FK al almacén/ubicación |
| CÓDIGO0 | Cantidad de existencias físicas |
| CÓDIGO0 | Cantidad de órdenes de compra abiertas |
| CÓDIGO0 | Cantidad comprometida para pedidos abiertos |
| CÓDIGO0 | QoH - Reservado |
| CÓDIGO0 | Costo medio o estándar |
| CÓDIGO0 | Cantidad disponible × costo unitario |
Movimientos_de_inventario (una fila por transacción de acciones):
| Columna | Descripción |
|---|---|
| CÓDIGO0 | ID de transacción |
| CÓDIGO0 | FK al artículo |
| CÓDIGO0 | FK a la ubicación |
| CÓDIGO0 | Fecha de movimiento |
| CÓDIGO0 | Recibo, Venta, Transferencia, Ajuste, Devolución |
| CÓDIGO0 | Cantidad movida (positiva = entrada, negativa = salida) |
| CÓDIGO0 | Coste unitario en el momento del movimiento |
Sales_Lines (una fila por línea de pedido de ventas para análisis de demanda):
OrderID,ItemID,OrderDate,ShipDate,Quantity,UnitPrice,Revenue,CustomerID
Purchase_Orders (para análisis de plazos de entrega y adquisiciones):
POID,ItemID,OrderDate,ExpectedDate,ReceiptDate,Quantity,UnitCost
Dim_Item (dimensión del producto):
ItemID,SKU,Name,Category,SubCategory,Supplier,LeadTimeDays,ReorderPoint,SafetyStock,UnitCost,ListPrice,IsActive
KPI de inventario principal con DAX
Medidas de nivel de existencias
// 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]
Rotación de inventario
// 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álisis ABC
El análisis ABC clasifica los artículos del inventario por su contribución a los ingresos o costos:
- Artículos A: 80% superior de los ingresos/COGS: alta prioridad, control estricto
- Elementos B: siguiente 15 %: control moderado
- Elementos C: 5% inferior: supervisión 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
Ampliar ABC con clasificación XYZ para la variabilidad de la demanda:
- X: Baja variabilidad de la demanda (CV < 0,5): predecible, plan para la eficiencia
- Y: variabilidad media (CV 0,5-1,0): cierta incertidumbre
- Z: Alta variabilidad (CV > 1,0): impredecible, planifique el nivel de servicio
// 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"
)
El segmento AX (altos ingresos, demanda predecible) recibe la gestión de reordenes más estricta. El segmento CZ (bajos ingresos, impredecible) es candidato a ser eliminado o fabricado bajo pedido.
Cálculos de puntos de reorden y existencias de seguridad
Fórmula de punto de reorden
Punto de reorden = (Uso diario promedio × Plazo de entrega) + Stock de seguridad
// 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 del stock de seguridad
// 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)
Inventario obsoleto y de lento movimiento (SLOB)
Identificar el inventario SLOB es fundamental para la optimización del capital de trabajo:
// 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)
Visualización de previsión de demanda
Power BI puede visualizar pronósticos de demanda usando:
Pronóstico integrado (panel de análisis)
Haga clic derecho en un gráfico de líneas → panel Análisis → Pronóstico:
- Duración de la previsión: 12 meses
- Intervalo de confianza: 95%
- Estacionalidad: Detección automática
Utiliza el algoritmo de suavizado exponencial (ETS), adecuado para patrones de demanda simples y estacionarios.
Pronóstico lineal DAX personalizado
// 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
Previsión de la demanda de aprendizaje automático de Azure
Para realizar una previsión de la demanda sofisticada, integre Azure Machine Learning:
- Entrene un modelo Prophet o ARIMA con datos históricos de demanda en Azure ML
- Implementar como un servicio web de Azure ML
- Llame desde flujos de datos de Power BI mediante la integración de AI Insights
- Valores de pronóstico superficiales como una columna en la dimensión del artículo
Arquitectura del panel de inventario
Página 1: Resumen ejecutivo del inventario
- Valor total de las existencias (tarjeta KPI con cambio mensual)
- Rotación de inventario (medidor versus punto de referencia de la industria)
- Días de Inventario Pendientes (KPI con tendencia)
- Recuento de artículos agotados (tarjeta de alerta, roja si >0)
- Valor SLOB (KPI con % del total)
- Valor de las acciones por categoría (mapa de árbol)
- Alertas de reorden (tabla: artículo, QoH, punto de reorden, días de suministro)
Página 2: Análisis ABC
- Gráfico de Pareto (artículos clasificados por ingresos, porcentaje acumulado)
- Distribución ABC (gráfico de anillos: recuento y valor por clase)
- Matriz ABC-XYZ (gráfico de dispersión: ingresos en X, CV en Y, tamaño de burbuja = valor de las acciones)
- Tabla de artículos principales A (artículo, ingresos, facturación, valor de stock, margen)
Página 3: Seguimiento de stock
- Mapa de calor a nivel de existencias (ubicación × categoría)
- Debajo de los artículos del punto de pedido (tabla con color de riesgo de desabastecimiento)
- Cronograma de orden de compra entrante (Gantt o gráfico de barras)
- Análisis de antigüedad del stock (gráfico de barras: 0-30, 30-60, 60-90, 90+ días)
Página 4: Demanda y previsión
- Demanda real frente a previsión (gráfico de líneas con previsión sombreada)
- Variabilidad de la demanda por categoría (diagrama de caja o barra con barras de error)
- Patrones de demanda estacionales (mapa de calor: meses × día de la semana)
- Los 20 productos más rápidos (gráfico de barras por unidades vendidas semanales)
Preguntas frecuentes
¿Cuál es la mejor manera de conectar Power BI a un ERP para datos de inventario?
El método de conexión depende de su ERP. Para Odoo, conéctese directamente a PostgreSQL en una réplica de lectura. Para SAP, utilice el conector SAP HANA con vistas CDS de inventario. Para NetSuite, utilice SuiteAnalytics Connect ODBC. Para Dynamics 365 Business Central, utilice el conector Business Central. Para todas las conexiones de ERP, utilice una cuenta de usuario de análisis dedicada con acceso de solo lectura a las tablas de inventario y programe actualizaciones en horas de menor actividad para minimizar la carga de ERP.
¿Cómo manejo el inventario de varios almacenes en Power BI?
Agregue una dimensión de Ubicación a su modelo de datos con atributos como nombre del almacén, ciudad, país y tipo (centro de distribución, tienda minorista, etc.). Todas las filas de instantáneas del inventario incluyen un ID de ubicación. Cree medidas que se agreguen en todas las ubicaciones o filtren por ubicación seleccionada mediante segmentación de datos. Para el análisis de transferencias entre almacenes, la tabla Inventory_Movements con MovementType = "Transfer" rastrea el movimiento de existencias entre ubicaciones.
¿Qué es un buen índice de rotación de inventario?
Depende en gran medida de la industria. Electrónica: 8-15x (alta velocidad, márgenes bajos). Comestibles/FMCG: 15-30x. Piezas de automóvil: 3-6x. Venta minorista de moda: 4-8x (estacional). Fabricación industrial: 3-8x. Compare su índice de rotación con el punto de referencia de su industria en lugar de con un objetivo genérico. Una relación "ideal" equilibra el nivel de servicio (evitar desabastecimientos) con el costo de mantenimiento (evitar excesos).
¿Puede Power BI predecir cuándo me quedaré sin existencias?
Sí, la medida "Días de suministro" calcula cuántos días cubre el stock actual a la tasa de ventas diaria promedio. Cuando esto cae por debajo del tiempo de entrega + reserva de existencias de seguridad, Power BI puede marcar el artículo como en riesgo y mostrarlo en una tabla de alertas de reorden. Para un abastecimiento predictivo, integre el pronóstico de la demanda de Azure ML para proyectar las ventas futuras y calcular cuándo el riesgo de desabastecimiento se vuelve crítico en función de la demanda pronosticada en lugar de la histórica.
¿Cómo debo visualizar el envejecimiento del inventario en Power BI?
Utilice un gráfico de barras apiladas que muestre el porcentaje del valor de las acciones en cada grupo de edad (0-30 días, 31-60, 61-90, 91-180, más de 180 días). El envejecimiento se calcula a partir de la fecha de recepción del lote más antiguo. Realice un seguimiento de esta tendencia a lo largo del tiempo para ver si su perfil de antigüedad está mejorando (moviéndose hacia existencias más frescas) o deteriorándose (acumulando inventario más antiguo). Resalte las acciones de más de 90 días en rojo como indicador de riesgo SLOB.
Próximos pasos
El análisis de inventario eficaz en Power BI reduce los costos de mantenimiento, evita el desabastecimiento y mejora el flujo de caja: las tres métricas más importantes para el liderazgo de operaciones y cadena de suministro. Obtener el modelo de datos correcto (niveles de stock basados en instantáneas, análisis de flujo basado en movimientos) es la base sobre la que se construye todo lo demás.
El equipo de Power BI de ECOSIRE crea paneles de control de inventario y cadena de suministro conectados a sus sistemas ERP: Odoo, SAP, NetSuite, Dynamics 365 y otros. Implementamos análisis ABC, sistemas de alerta de reordenamiento y visualización de pronósticos de demanda como paneles de control listos para producción.
Explore nuestros servicios de desarrollo de paneles de Power BI para la implementación de análisis de la cadena de suministro, o póngase en contacto con nuestro equipo para analizar sus fuentes de datos de inventario y requisitos de análisis.
Escrito por
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Desbloquear decisiones basadas en datos
Paneles de Power BI personalizados, modelado de datos y soluciones de análisis integradas.
Artículos relacionados
Inventario de Odoo 19: almacenamiento, retiro y reabastecimiento en profundidad
Domine el inventario de Odoo 19: nuevas estrategias de almacenamiento, lógica de eliminación FEFO/LIFO/FIFO, reabastecimiento dinámico, rutas de varios pasos y flujos de códigos de barras.
Power BI para Odoo: 12 patrones DAX listos para producción
12 patrones DAX probados en batalla para datos de Odoo en Power BI: inteligencia de tiempo, cohortes de clientes, antigüedad de inventario, pérdidas y ganancias de varias empresas y uniones de claves compuestas.
Actualización incremental de Power BI para tablas de más de 10 millones de filas
Guía de actualización incremental de Power BI para tablas de más de 10 millones de filas: diseño de particiones, RangeStart/RangeEnd, políticas de actualización, plegado de consultas e híbridos de DirectQuery.
Más de Supply Chain & Procurement
Inventario de Odoo 19: almacenamiento, retiro y reabastecimiento en profundidad
Domine el inventario de Odoo 19: nuevas estrategias de almacenamiento, lógica de eliminación FEFO/LIFO/FIFO, reabastecimiento dinámico, rutas de varios pasos y flujos de códigos de barras.
IA para la optimización de la cadena de suministro: visibilidad, predicción y automatización
Transforme las operaciones de la cadena de suministro con IA: detección de demanda, calificación de riesgos de proveedores, optimización de rutas, automatización de almacenes y predicción de interrupciones. Guía 2026.
Cómo redactar una solicitud de propuesta de ERP: plantilla gratuita y criterios de evaluación
Escriba una RFP de ERP eficaz con nuestra plantilla gratuita, lista de verificación de requisitos obligatorios, metodología de calificación de proveedores, scripts de demostración y guía de verificación de referencias.
Aprendizaje automático para la planificación de la demanda: predecir las necesidades de inventario con precisión
Implemente la planificación de la demanda basada en ML para predecir las necesidades de inventario con una precisión del 85 al 95 %. Pronóstico de series temporales, patrones estacionales y guía de integración de Odoo.
Compras y adquisiciones de Odoo: Guía completa de automatización 2026
Domine las compras y adquisiciones de Odoo 19 con solicitudes de cotización, gestión de proveedores, correspondencia tripartita, costos logísticos y reglas de reorden. Guía de automatización completa.
Panel de la cadena de suministro de Power BI: seguimiento de visibilidad y rendimiento
Cree un panel de la cadena de suministro de Power BI que rastree la rotación de inventario, los plazos de entrega de los proveedores, el cumplimiento de los pedidos, la demanda frente a la oferta, los costos de logística y la utilización del almacén.