Parte de nuestra serie Manufacturing in the AI Era
Leer la guía completaAnálisis de fabricación en Power BI: OEE, calidad y rendimiento
Las instalaciones de fabricación de clase mundial funcionan con una OEE superior al 85 %. El fabricante medio trabaja al 60%. Esa brecha de 25 puntos porcentuales se traduce directamente en capacidad: una instalación que mejora del 60 % al 85 % de OEE agrega un 41 % más de producción sin una sola máquina nueva o alquiler. La diferencia entre lo de clase mundial y lo promedio casi siempre no es el equipo, sino la visibilidad para ver los desechos y los datos para eliminarlos.
Power BI, conectado a MES (Sistema de ejecución de fabricación) y datos de ERP, proporciona esa visibilidad. Esta guía crea una plataforma completa de análisis de fabricación que cubre el cálculo de OEE, gráficos de SPC de calidad, análisis de la causa raíz del tiempo de inactividad y gestión del rendimiento, con las fórmulas DAX precisas que necesitan los ingenieros de fabricación.
Conclusiones clave
- OEE = Disponibilidad × Rendimiento × Calidad (clase mundial = 85%+)
- Cada componente de OEE requiere flujos de datos separados: registros de tiempo de inactividad, recuentos de producción, registros de desechos
- Los gráficos SPC (control estadístico de procesos) en Power BI utilizan elementos visuales personalizados o límites de control calculados
- El análisis de Pareto del tiempo de inactividad (el 20 % de las razones principales causan el 80 % del tiempo de inactividad) impulsa la mejora priorizada
- El rendimiento de la primera pasada (FPY) y los defectos por millón de oportunidades (DPMO) son los KPI de calidad clave
- El análisis de rendimiento compara la capacidad real con la teórica utilizando la teoría de cuellos de botella
- Los conjuntos de datos de transmisión de Power BI permiten que los paneles OEE se actualicen casi en tiempo real cada minuto.
- La integración de ERP (Odoo Manufacturing, SAP PP, Dynamics 365 SCM) proporciona un contexto de orden de trabajo
Modelo de datos para análisis de fabricación
Tablas de fabricación de núcleos
Production_Runs (una fila por ejecución de producción/orden de trabajo):
| Columna | Descripción |
|---|---|
| CÓDIGO0 | Orden de trabajo o ID de ejecución de producción |
| CÓDIGO0 | FK a Dimensión de la máquina |
| CÓDIGO0 | FK al producto |
| CÓDIGO0 | FK para cambiar |
| CÓDIGO0 | Ejecutar fecha y hora de inicio |
| CÓDIGO0 | Ejecutar fecha y hora de finalización |
| CÓDIGO0 | Inicio programado |
| CÓDIGO0 | Fin previsto |
| CÓDIGO0 | Cantidad de producción objetivo |
| CÓDIGO0 | Unidades reales producidas |
| CÓDIGO0 | Unidades que pasan el control de calidad |
| CÓDIGO0 | Unidades defectuosas |
| CÓDIGO0 | Unidades que requieren reelaboración |
| CÓDIGO0 | Segundos por unidad a la velocidad de diseño |
Downtime_Events (una fila por parada):
| Columna | Descripción |
|---|---|
| CÓDIGO0 | Identificación única |
| CÓDIGO0 | FK a la máquina |
| CÓDIGO0 | FK a ejecución de producción (si corresponde) |
| CÓDIGO0 | Inicio del tiempo de inactividad |
| CÓDIGO0 | Fin del tiempo de inactividad |
| CÓDIGO0 | Duración total del tiempo de inactividad |
| CÓDIGO0 | Planificado (PM, cambio) / No planificado |
| CÓDIGO0 | Código de motivo específico |
| CÓDIGO0 | Descripción |
| CÓDIGO0 | Bandera de mantenimiento planificado |
| CÓDIGO0 | Tiempo hasta que el técnico respondió |
| CÓDIGO0 | Tiempo de reparación activo |
Quality_Events (una fila por defecto/inspección):
| Columna | Descripción |
|---|---|
| CÓDIGO0 | Identificación única |
| CÓDIGO0 | FK a la producción |
| CÓDIGO0 | FK a la máquina |
| CÓDIGO0 | Fecha/hora de la inspección |
| CÓDIGO0 | FK al tipo de defecto |
| CÓDIGO0 | Número de defectos encontrados |
| CÓDIGO0 | Unidades inspeccionadas |
| CÓDIGO0 | Medición variable (para SPC) |
| CÓDIGO0 | Booleano: dentro de la tolerancia |
Dim_Machine:
MachineID,MachineName,Line,Cell,Department,MachineType,IdealRunRate,PlannedCapacity
Dim_Shift:
ShiftID,ShiftName,StartTime,EndTime,PlannedMinutes,PlannedBreakMinutes
Cálculo de OEE en Power BI
OEE = Disponibilidad × Rendimiento × Calidad
Disponibilidad
Disponibilidad = Tiempo de ejecución real / Tiempo de producción planificado
// Planned Production Time (from shift schedule minus planned downtime)
Planned Production Time =
SUMX(
Production_Runs,
DATEDIFF(Production_Runs[PlannedStartTime],
Production_Runs[PlannedEndTime], MINUTE)
)
// Unplanned Downtime (excludes scheduled maintenance, changeovers)
Unplanned Downtime =
CALCULATE(
SUM(Downtime_Events[DurationMinutes]),
Downtime_Events[DowntimeCategory] = "Unplanned"
)
// Changeover Time (planned but reduces availability)
Changeover Time =
CALCULATE(
SUM(Downtime_Events[DurationMinutes]),
Downtime_Events[DowntimeReasonCode] = "CHANGEOVER"
)
// Actual Run Time
Actual Run Time = [Planned Production Time] - [Unplanned Downtime] - [Changeover Time]
// OEE Availability
Availability =
DIVIDE([Actual Run Time], [Planned Production Time], 0)
Rendimiento
Rendimiento = (Tiempo de ciclo ideal × Conteo total) / Tiempo de ejecución real O equivalente: producción real / producción máxima teórica
// Theoretical Maximum Output at ideal run rate
Theoretical Max Output =
SUMX(
Production_Runs,
[Actual Run Time Per Run] / Production_Runs[IdealCycleTime]
)
// Actual total output (good + scrap + rework)
Total Output =
SUM(Production_Runs[ActualQuantity])
// OEE Performance
Performance =
DIVIDE([Total Output], [Theoretical Max Output], 0)
// Performance per machine (for benchmarking)
Machine Performance =
DIVIDE(
SUMX(Production_Runs, Production_Runs[ActualQuantity]),
SUMX(Production_Runs,
DATEDIFF(Production_Runs[StartTime], Production_Runs[EndTime], MINUTE) /
RELATED(Dim_Machine[IdealCycleTime]) * 60
),
0
)
Calidad
Calidad = Buen resultado/Resultado total (excluye todos los defectos)
// Good Quantity (first pass, no rework)
Good Quantity = SUM(Production_Runs[GoodQuantity])
// Total Quantity Produced (good + scrap + rework)
Total Quantity = SUM(Production_Runs[ActualQuantity])
// OEE Quality
Quality Rate =
DIVIDE([Good Quantity], [Total Quantity], 0)
// First Pass Yield (no rework, no scrap)
First Pass Yield =
DIVIDE(
SUM(Production_Runs[GoodQuantity]),
SUM(Production_Runs[ActualQuantity]),
0
)
OEE general
// Overall Equipment Effectiveness
OEE =
[Availability] * [Performance] * [Quality Rate]
// OEE Status (for conditional formatting)
OEE Status =
SWITCH(TRUE(),
[OEE] >= 0.85, "World Class", -- 85%+
[OEE] >= 0.75, "Good", -- 75-85%
[OEE] >= 0.60, "Acceptable", -- 60-75%
"Poor" -- <60%
)
// OEE Loss Analysis (what is the primary constraint)
Primary OEE Constraint =
SWITCH(TRUE(),
[Availability] < [Performance] && [Availability] < [Quality Rate], "Availability",
[Performance] < [Quality Rate], "Performance",
"Quality"
)
// OEE trend (for sparkline visualization)
OEE Weekly Avg =
CALCULATE(
[OEE],
DATESINPERIOD(Date[Date], LASTDATE(Date[Date]), -7, DAY)
)
Análisis del tiempo de inactividad
KPI de tiempo de inactividad y Pareto
// Total Unplanned Downtime Hours
Unplanned Downtime Hours =
DIVIDE(
CALCULATE(
SUM(Downtime_Events[DurationMinutes]),
Downtime_Events[DowntimeCategory] = "Unplanned"
),
60,
0
)
// Mean Time Between Failures (MTBF)
MTBF =
DIVIDE(
[Actual Run Time],
CALCULATE(COUNTROWS(Downtime_Events),
Downtime_Events[DowntimeCategory] = "Unplanned"),
0
)
// Mean Time to Repair (MTTR)
MTTR =
AVERAGEX(
FILTER(Downtime_Events, Downtime_Events[DowntimeCategory] = "Unplanned"),
Downtime_Events[RepairTimeMinutes]
)
// Downtime % by reason (for Pareto chart)
Downtime Pareto % =
DIVIDE([Unplanned Downtime Hours],
CALCULATE([Unplanned Downtime Hours], ALL(Downtime_Events[DowntimeReasonCode])),
0
)
// Cumulative Downtime % (for Pareto 80/20 line)
Cumulative Downtime % =
DIVIDE(
SUMX(
FILTER(
ALL(Downtime_Events[DowntimeReasonCode]),
RANKX(ALL(Downtime_Events[DowntimeReasonCode]),
[Unplanned Downtime Hours], , DESC) <=
RANKX(ALL(Downtime_Events[DowntimeReasonCode]),
[Unplanned Downtime Hours], , DESC)
),
[Unplanned Downtime Hours]
),
CALCULATE([Unplanned Downtime Hours], ALL(Downtime_Events[DowntimeReasonCode])),
0
)
Mapa de calor de tiempo de inactividad
Cree un mapa de calor del tiempo de inactividad por máquina × hora del día para identificar patrones relacionados con los turnos:
// Downtime by Hour of Day (for heatmap rows)
Downtime by Hour =
CALCULATE(
SUM(Downtime_Events[DurationMinutes]),
Downtime_Events[HourOfDay] = SELECTEDVALUE(HourDim[Hour])
)
Análisis de calidad: gráficos SPC
Los gráficos de control estadístico de procesos monitorean si un proceso está bajo control. Power BI crea gráficos SPC mediante cálculos de límites de control en DAX.
Límites de control para el gráfico de barras X
// Process Mean (X-bar)
Process Mean =
AVERAGE(Quality_Events[MeasuredValue])
// Standard Deviation of measurements
Process StdDev =
STDEV.P(Quality_Events[MeasuredValue])
// Upper Control Limit (UCL = mean + 3σ)
UCL = [Process Mean] + 3 * [Process StdDev]
// Lower Control Limit (LCL = mean - 3σ)
LCL = [Process Mean] - 3 * [Process StdDev]
// Upper Warning Limit (mean + 2σ)
UWL = [Process Mean] + 2 * [Process StdDev]
// Lower Warning Limit (mean - 2σ)
LWL = [Process Mean] - 2 * [Process StdDev]
// Out of Control flag (point outside 3σ limits)
Out of Control =
IF(
Quality_Events[MeasuredValue] > [UCL] ||
Quality_Events[MeasuredValue] < [LCL],
"Out of Control",
"In Control"
)
// Process Capability Index (Cpk)
Cpk =
MIN(
DIVIDE([UCL] - [Process Mean], 3 * [Process StdDev], 0),
DIVIDE([Process Mean] - [LCL], 3 * [Process StdDev], 0)
)
KPI clave de calidad
// Defects per Million Opportunities (DPMO)
DPMO =
DIVIDE(
SUM(Quality_Events[DefectCount]),
SUM(Quality_Events[SampleSize]) * [Opportunities per Unit],
0
) * 1000000
// Sigma Level (from DPMO)
Sigma Level =
SWITCH(TRUE(),
[DPMO] < 3.4, 6,
[DPMO] < 233, 5,
[DPMO] < 6210, 4,
[DPMO] < 66807, 3,
[DPMO] < 308537, 2,
1
)
// Defect Rate %
Defect Rate = DIVIDE(SUM(Quality_Events[DefectCount]), SUM(Quality_Events[SampleSize]), 0)
// Scrap Rate
Scrap Rate =
DIVIDE(
SUM(Production_Runs[ScrapQuantity]),
SUM(Production_Runs[ActualQuantity]),
0
)
// Cost of Poor Quality (COPQ)
COPQ =
SUMX(
Production_Runs,
(Production_Runs[ScrapQuantity] + Production_Runs[ReworkQuantity]) *
RELATED(Dim_Product[StandardCost])
)
Análisis de rendimiento
KPI de rendimiento de producción
// Actual Throughput (units per hour)
Throughput =
DIVIDE(
SUM(Production_Runs[ActualQuantity]),
SUMX(Production_Runs,
DATEDIFF(Production_Runs[StartTime], Production_Runs[EndTime], HOUR)
),
0
)
// Theoretical Maximum Throughput
Max Throughput =
SUMX(
Dim_Machine,
60 / Dim_Machine[IdealCycleTime] -- Units per minute × 60
) * 60 -- Per hour
// Capacity Utilization
Capacity Utilization =
DIVIDE([Throughput], [Max Throughput], 0)
// Schedule Attainment (actual vs planned quantity)
Schedule Attainment =
DIVIDE(
SUM(Production_Runs[ActualQuantity]),
SUM(Production_Runs[PlannedQuantity]),
0
)
// Changeover Time (as % of planned time)
Changeover % =
DIVIDE(
[Changeover Time],
[Planned Production Time],
0
)
Análisis de equilibrio de línea
Identifique las máquinas con cuellos de botella mediante la comparación de rendimiento:
// Machine Throughput Rate (for bottleneck identification)
Machine Throughput Rate =
DIVIDE(
CALCULATE(SUM(Production_Runs[GoodQuantity])),
CALCULATE(
DATEDIFF(MIN(Production_Runs[StartTime]),
MAX(Production_Runs[EndTime]), HOUR)
),
0
)
// Bottleneck indicator (lowest throughput machine in a line)
Is Bottleneck =
IF(
[Machine Throughput Rate] = MINX(
FILTER(ALL(Dim_Machine), Dim_Machine[Line] = SELECTEDVALUE(Dim_Machine[Line])),
[Machine Throughput Rate]
),
"Bottleneck",
"OK"
)
Arquitectura del panel de fabricación
Página 1: Resumen de OEE
- Indicador OEE (objetivo actual frente al objetivo de clase mundial del 85 %)
- Disponibilidad, Rendimiento, Calidad: tres tarjetas KPI
- Tendencia OEE 30 días (gráfico de líneas)
- OEE por máquina (gráfico de barras, ordenado de menor a mayor)
- OEE por turno (gráfico de barras: identifique las diferencias en el rendimiento de los turnos)
- Mapa de calor OEE (Máquina × Día de la semana)
Página 2: Análisis del tiempo de inactividad
- Total de horas de inactividad no planificadas (tarjeta KPI)
- MTBF y MTTR (dos tarjetas KPI)
- Pareto de tiempo de inactividad (barra de combinación + línea con % acumulado)
- Tiempo de inactividad por máquina (gráfico de barras horizontales)
- Tiempo muerto por turno (barra agrupada)
- Tendencia de tiempo de inactividad de 90 días (gráfico de líneas)
- Eventos de tiempo de inactividad activos (tabla en tiempo real si se transmite)
Página 3: Panel de calidad
- Rendimiento de la primera pasada (medidor versus objetivo)
- DPMO y Sigma Level (tarjetas KPI)
- Tasa de desechos por producto (gráfico de barras)
- Tendencia COPQ (gráfico de líneas que muestra el costo de los problemas de calidad)
- Defecto Pareto por código de defecto
- Gráfico SPC (gráfico de líneas con líneas de referencia UCL, LCL, UWL, LWL)
Página 4: Rendimiento y capacidad
- % de cumplimiento del cronograma (indicador)
- Producción real vs planificada (barra agrupada por día)
- Utilización de la capacidad por máquina (mapa de calor)
- Análisis del tiempo de cambio (gráfico de barras por producto/máquina)
- Tendencia de la producción (gráfico de áreas, real frente a objetivo)
- Tabla destacada de máquinas de cuellos de botella
Preguntas frecuentes
¿Qué es OEE y por qué es importante para la fabricación?
OEE (Eficacia general del equipo) es la métrica estándar de oro para la productividad de fabricación. Combina tres factores: Disponibilidad (el equipo funciona cuando debería), Rendimiento (funciona a la velocidad adecuada) y Calidad (produce buenas piezas). Un OEE del 60 % significa que está aprovechando solo el 60 % de su capacidad teórica; el otro 40 % es desperdicio. La mejora de la OEE aumenta directamente la producción sin necesidad de invertir capital en nuevos equipos.
¿Se puede conectar Power BI a sistemas MES para OEE en tiempo real?
Sí, la mayoría de los sistemas MES (Ignition SCADA, GE Proficy, Siemens MES, Rockwell FactoryTalk) admiten conectividad de bases de datos (SQL Server, Oracle) o acceso a API REST. Power BI se conecta a estas bases de datos y puede usar conjuntos de datos de transmisión para actualizaciones casi en tiempo real (cada 30 segundos a 1 minuto). Para una OEE real en tiempo real (menos de un segundo), use Azure IoT Hub o Event Hub con conjuntos de datos de Power BI Streaming enviados directamente desde los sensores de la planta.
¿Qué datos necesita una fábrica para comenzar a realizar un seguimiento de la OEE?
Requisitos mínimos de datos para OEE básica: (1) Datos de recuento de producción: cuándo funcionó la máquina y cuántas unidades se produjeron, (2) Eventos de tiempo de inactividad: cuándo se detuvo la máquina y por qué, (3) Recuentos de calidad: cuántas unidades buenas y defectuosas. Esto puede provenir de la entrada manual del operador (Excel/papel → Power BI), datos básicos del contador MES o PLC. No se requieren datos perfectos para comenzar; incluso la visibilidad imperfecta de la OEE impulsa la mejora.
¿Cómo creo un gráfico SPC en Power BI?
Cree un gráfico de líneas con los valores de medición como serie principal. Agregue cuatro medidas adicionales (UCL, LCL, UWL, LWL) como series de líneas separadas en el gráfico. Formatee UCL/LCL como líneas discontinuas rojas y UWL/LWL como líneas discontinuas naranjas. El formato condicional en puntos de datos resalta en rojo los puntos fuera de control. El objeto visual personalizado SPC integrado de AppSource proporciona detección de reglas de Western Electric (ejecuciones por encima/debajo del centro, tendencias, etc.) más allá del enfoque de límite de control básico.
¿Cuál es un cronograma realista para implementar un panel de fabricación de Power BI?
Se puede crear un panel de OEE básico (una sola máquina, entrada manual de datos a través de una lista de SharePoint o Excel) en 1 o 2 semanas. Una plataforma completa de análisis de fabricación conectada a MES y ERP (multimáquina, multilínea, con SPC de calidad, Pareto de tiempo de inactividad y análisis de rendimiento) suele tardar entre 6 y 12 semanas. La fase más larga es siempre la integración y la calidad de los datos: las marcas de tiempo de las máquinas, los códigos de motivo de tiempo de inactividad y los cambios de productos deben capturarse de manera consistente antes de que los análisis agreguen valor.
¿Cómo conecta ECOSIRE Power BI con Odoo Manufacturing?
Odoo Manufacturing almacena órdenes de trabajo de producción, consumo de materiales, controles de calidad y solicitudes de mantenimiento en PostgreSQL. ECOSIRE conecta Power BI directamente a la base de datos PostgreSQL de Odoo (en una réplica de lectura) y modela las tablas de fabricación (mrp.production, mrp.workcenter, Quality.check, Maintenance.request) en el modelo de datos OEE descrito en esta guía. Manejamos la planificación de capacidad a nivel de centro de trabajo y la integración de calidad como parte de nuestra práctica de integración de Odoo ERP.
Próximos pasos
Los análisis de fabricación en Power BI, cuando se conectan a los datos de su planta de producción, brindan la visibilidad en tiempo real que separa a los fabricantes de clase mundial de los de desempeño promedio. La OEE, el análisis de la causa raíz del tiempo de inactividad y los gráficos SPC de calidad brindan a los equipos de operaciones la información para mejorar antes de que los problemas se agraven.
ECOSIRE crea paneles de fabricación conectados a sistemas MES, plataformas ERP (Odoo, SAP, Dynamics 365) y flujos de datos de IoT. Nuestros servicios de desarrollo de paneles de Power BI cubren toda la pila de análisis de fabricación, desde el diseño del modelo de datos hasta los paneles listos para producción.
Póngase en contacto con nuestro equipo de análisis de fabricación para analizar las fuentes de datos de su planta y diseñar una plataforma de análisis de Power BI que impulse una mejora mensurable de la OEE.
Escrito por
ECOSIRE Research and Development Team
Construyendo productos digitales de nivel empresarial en ECOSIRE. Compartiendo perspectivas sobre integraciones Odoo, automatización de eCommerce y soluciones empresariales impulsadas por IA.
Artículos 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.
Case Study: Manufacturing ERP Implementation with Odoo 19
How a Pakistani auto-parts manufacturer cut order processing time by 68% and reduced inventory variance to under 2% with ECOSIRE's Odoo 19 implementation.
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%.
Más de Manufacturing in the AI Era
Case Study: Manufacturing ERP Implementation with Odoo 19
How a Pakistani auto-parts manufacturer cut order processing time by 68% and reduced inventory variance to under 2% with ECOSIRE's Odoo 19 implementation.
Digital Twins in Manufacturing: Connecting Physical and Digital
Understand how digital twin technology is transforming manufacturing—from machine-level predictive maintenance to full factory simulation and ERP integration strategies.
ERP for Automotive: Parts Management, Service, and Manufacturing
Complete guide to ERP for the automotive industry — parts management, dealer operations, vehicle service, manufacturing, and supply chain for 2026.
Industry 5.0: Human-Machine Collaboration in Manufacturing
Understand Industry 5.0 and how human-machine collaboration is transforming manufacturing—from cobots and exoskeletons to AI-guided assembly and resilient supply chains.
Quality Control in Odoo: Inspections, Alerts, and Compliance
Complete guide to Odoo 19 Quality Control: configure control points, inspection types, quality alerts, CAPA workflows, and compliance documentation for manufacturing.
Gestión de calidad aeroespacial: AS9100, NADCAP y cumplimiento impulsado por ERP
Implemente la gestión de calidad aeroespacial con AS9100 Rev D, acreditación NADCAP y sistemas ERP para gestión de configuración, FAI y control de la cadena de suministro.