Manufacturing Analytics in Power BI: OEE, Quality, and Throughput

Build a Power BI manufacturing dashboard covering OEE calculation, quality metrics, production throughput, downtime analysis, and SPC charts — with complete DAX formulas.

E
ECOSIRE Research and Development Team
|19 mars 202613 min de lecture2.8k Mots|

Fait partie de notre série Manufacturing in the AI Era

Lire le guide complet

Manufacturing Analytics dans Power BI : OEE, qualité et débit

Les installations de fabrication de classe mondiale fonctionnent à 85 %+ OEE. Le constructeur moyen tourne à 60 %. Cet écart de 25 points de pourcentage se traduit directement en capacité : une installation qui s'améliore de 60 % à 85 % du TRG ajoute 41 % de production en plus sans une seule nouvelle machine ou embauche. La différence entre une entreprise de classe mondiale et une entreprise moyenne ne réside presque toujours pas dans l'équipement, mais plutôt dans la visibilité permettant de visualiser les déchets et les données permettant de les éliminer.

Power BI, connecté aux données MES (Manufacturing Execution System) et ERP, offre cette visibilité. Ce guide crée une plate-forme complète d'analyse de fabrication couvrant le calcul de l'OEE, les graphiques SPC de qualité, l'analyse des causes profondes des temps d'arrêt et la gestion du débit, avec les formules DAX précises dont les ingénieurs de fabrication ont besoin.

Points clés à retenir

  • OEE = Disponibilité × Performance × Qualité (classe mondiale = 85 %+)
  • Chaque composant OEE nécessite des flux de données distincts : journaux de temps d'arrêt, décomptes de production, enregistrements de rebuts
  • Les graphiques SPC (Statistical Process Control) dans Power BI utilisent des visuels personnalisés ou des limites de contrôle calculées
  • L'analyse Pareto des temps d'arrêt (les 20 % principaux des raisons sont à l'origine de 80 % des temps d'arrêt) permet d'améliorer les priorités
  • Le rendement au premier passage (FPY) et les défauts par million d'opportunités (DPMO) sont les principaux KPI de qualité
  • L'analyse du débit compare la capacité réelle à la capacité théorique en utilisant la théorie des goulots d'étranglement
  • Les ensembles de données de streaming Power BI permettent de mettre à jour les tableaux de bord OEE en temps quasi réel toutes les minutes.
  • L'intégration ERP (Odoo Manufacturing, SAP PP, Dynamics 365 SCM) fournit un contexte de bon de travail

Modèle de données pour l'analyse de la fabrication

Tableaux de fabrication de base

Production_Runs (une ligne par cycle de production/ordre de travail) :

ColonneDescriptif
RunIDID de bon de travail ou d'exécution de production
MachineIDFK à la dimension de la machine
ProductIDFK au produit
ShiftIDFK pour décaler
StartTimeExécuter la date et l'heure de début
EndTimeDateheure de fin d'exécution
PlannedStartTimeDémarrage programmé
PlannedEndTimeFin programmée
PlannedQuantityQuantité de production cible
ActualQuantityUnités réelles produites
GoodQuantityUnités passant le contrôle de qualité
ScrapQuantityUnités défectueuses
ReworkQuantityUnités nécessitant une reprise
IdealCycleTimeSecondes par unité à la vitesse de conception

Downtime_Events (une ligne par arrêt) :

ColonneDescriptif
DowntimeIDIdentifiant unique
MachineIDFK à la machine
RunIDFK au cycle de production (le cas échéant)
StartTimeDébut des temps d'arrêt
EndTimeFin des temps d'arrêt
DurationMinutesDurée totale du temps d'arrêt
DowntimeCategoryPlanifié (PM, changement) / Non planifié
DowntimeReasonCodeCode motif spécifique
DowntimeReasonDescDescriptif
IsScheduledMaintenanceIndicateur de maintenance planifiée
ResponseTimeMinutesTemps jusqu'à ce que le technicien réponde
RepairTimeMinutesTemps de réparation actif

Quality_Events (une ligne par défaut/inspection) :

ColonneDescriptif
InspectionIDIdentifiant unique
RunIDFK en production
MachineIDFK à la machine
InspectionDateDate/heure de l'inspection
DefectCodeFK au type de défaut
DefectCountNombre de défauts trouvés
SampleSizeUnités inspectées
MeasuredValueMesure variable (pour SPC)
IsInSpecBooléen — dans les limites de tolérance

Dim_Machine :

  • MachineID, MachineName, Line, Cell, Department, MachineType, IdealRunRate, PlannedCapacity

Dim_Shift :

  • ShiftID, ShiftName, StartTime, EndTime, PlannedMinutes, PlannedBreakMinutes

Calcul OEE dans Power BI

OEE = Disponibilité × Performance × Qualité

Disponibilité

Disponibilité = Temps d'exécution réel / Temps de production prévu

// 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)

Performances

Performance = (Durée de cycle idéale × Nombre total) / Durée d'exécution réelle Ou de manière équivalente : Sortie réelle / Sortie maximale théorique

// 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
)

Qualité

Qualité = Bon rendement / Rendement total (exclut tous les défauts)

// 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
)

TRS global

// 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)
)

Analyse des temps d'arrêt

KPI de temps d'arrêt et 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
)

Carte thermique des temps d'arrêt

Créez une carte thermique des temps d'arrêt par machine × heure de la journée pour identifier les modèles liés aux équipes :

// Downtime by Hour of Day (for heatmap rows)
Downtime by Hour =
CALCULATE(
    SUM(Downtime_Events[DurationMinutes]),
    Downtime_Events[HourOfDay] = SELECTEDVALUE(HourDim[Hour])
)

Analyse qualité : graphiques SPC

Les graphiques de contrôle statistique des processus vérifient si un processus est sous contrôle. Power BI crée des graphiques SPC à l’aide de calculs de limites de contrôle dans DAX.

Limites de contrôle pour les graphiques X-Bar

// 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 clés de qualité

// 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])
)

Analyse du débit

KPI de débit de production

// 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
)

Analyse d'équilibrage de ligne

Identifiez les machines à goulot d'étranglement à l'aide de la comparaison du débit :

// 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"
)

Architecture du tableau de bord de fabrication

Page 1 : Résumé du TRS

  • Jauge OEE (objectif actuel par rapport à l'objectif de 85 % de classe mondiale)
  • Disponibilité, Performance, Qualité — trois cartes KPI
  • Tendance OEE 30 jours (graphique linéaire)
  • OEE par machine (histogramme, trié de bas en haut)
  • OEE par équipe (graphique à barres – identifier les différences de performance entre équipes)
  • Carte thermique OEE (Machine × Jour de la semaine)

Page 2 : Analyse des temps d'arrêt

  • Total des heures d'arrêt non planifiées (carte KPI)
  • MTBF et MTTR (deux cartes KPI)
  • Temps d'arrêt Pareto (combinaison barre + ligne avec %) cumulé
  • Temps d'arrêt par machine (graphique à barres horizontales)
  • Temps d'arrêt par équipe (barre groupée)
  • Tendance des temps d'arrêt sur 90 jours (graphique linéaire)
  • Événements de temps d'arrêt actifs (tableau en temps réel si streaming)

Page 3 : Tableau de bord qualité

  • Rendement du premier passage (jauge vs cible)
  • DPMO et Sigma Level (cartes KPI)
  • Taux de rebut par produit (graphique à barres)
  • Tendance COPQ (graphique linéaire montrant le coût des problèmes de qualité)
  • Défaut Pareto par code défaut
  • Graphique SPC (graphique linéaire avec lignes de référence UCL, LCL, UWL, LWL)

Page 4 : Débit et capacité

-% de réalisation du calendrier (jauge)

  • Production réelle vs planifiée (barre regroupée par jour)
  • Utilisation des capacités par machine (heatmap)
  • Analyse des temps de changement (histogramme par produit/machine)
  • Tendance de la production (graphique en aires, réel par rapport à l'objectif)
  • Tableau des points forts des machines à goulot d'étranglement

Questions fréquemment posées

Qu'est-ce que l'OEE et pourquoi est-il important pour la fabrication ?

L'OEE (Overall Equipment Effectiveness) est la mesure de référence en matière de productivité manufacturière. Il combine trois facteurs : la disponibilité (l'équipement fonctionne quand il le devrait), la performance (fonctionne à la bonne vitesse) et la qualité (produit de bonnes pièces). Un OEE de 60 % signifie que vous ne réalisez que 60 % de votre capacité théorique – les 40 % restants sont du gaspillage. L’amélioration du TRS augmente directement la production sans investissement en capital dans de nouveaux équipements.

Power BI peut-il se connecter aux systèmes MES pour un OEE en temps réel ?

Oui, la plupart des systèmes MES (Ignition SCADA, GE Proficy, Siemens MES, Rockwell FactoryTalk) prennent en charge la connectivité aux bases de données (SQL Server, Oracle) ou l'accès à l'API REST. Power BI se connecte à ces bases de données et peut utiliser des ensembles de données en streaming pour des mises à jour en temps quasi réel (toutes les 30 secondes à 1 minute). Pour un véritable OEE en temps réel (inférieur à la seconde), utilisez Azure IoT Hub ou Event Hub avec des ensembles de données Power BI Streaming transmis directement à partir des capteurs de l'usine.

De quelles données une usine a-t-elle besoin pour commencer à suivre l'OEE ?

Exigences minimales en matière de données pour l'OEE de base : (1) Données de comptage de production – quand la machine a-t-elle fonctionné et combien d'unités ont été produites, (2) Événements de temps d'arrêt – quand la machine s'est-elle arrêtée et pourquoi, (3) La qualité compte – combien d'unités bonnes ou défectueuses. Cela peut provenir d’une saisie manuelle de l’opérateur (Excel/papier → Power BI), de données de base du MES ou du compteur PLC. Il n’est pas nécessaire de disposer de données parfaites pour démarrer : même une visibilité imparfaite du TRS entraîne une amélioration.

Comment créer un graphique SPC dans Power BI ?

Créez un graphique linéaire avec les valeurs de mesure comme série principale. Ajoutez quatre mesures supplémentaires (UCL, LCL, UWL, LWL) sous forme de séries de lignes distinctes dans le graphique. Formatez UCL/LCL sous forme de lignes pointillées rouges et UWL/LWL sous forme de lignes pointillées orange. Le formatage conditionnel des points de données met en évidence les points hors de contrôle en rouge. Le visuel personnalisé SPC intégré d'AppSource permet la détection des règles de Western Electric (dépassements au-dessus/en dessous du centre, tendances, etc.) au-delà de l'approche de base des limites de contrôle.

Quel est un calendrier réaliste pour mettre en œuvre un tableau de bord de fabrication Power BI ?

Un tableau de bord OEE de base (machine unique, saisie manuelle des données via une liste SharePoint ou Excel) peut être construit en 1 à 2 semaines. Une plate-forme complète d'analyse de fabrication connectée au MES et à l'ERP (multi-machines, multi-lignes, avec SPC de qualité, Pareto des temps d'arrêt et analyse du débit) prend généralement 6 à 12 semaines. La phase la plus longue est toujours l'intégration et la qualité des données : les horodatages des machines, les codes de motif d'arrêt et les changements de produits doivent être capturés de manière cohérente avant que les analyses n'ajoutent de la valeur.

Comment ECOSIRE connecte-t-il Power BI à Odoo Manufacturing ?

Odoo Manufacturing stocke les bons de travail de production, la consommation de matériaux, les contrôles de qualité et les demandes de maintenance dans PostgreSQL. ECOSIRE connecte Power BI directement à la base de données PostgreSQL d'Odoo (sur une réplique en lecture) et modélise les tables de fabrication (mrp.production, mrp.workcenter, quality.check, maintenance.request) dans le modèle de données OEE décrit dans ce guide. Nous gérons la planification des capacités au niveau du centre de travail et l'intégration de la qualité dans le cadre de notre pratique d'intégration Odoo ERP.


Prochaines étapes

L'analyse de la fabrication dans Power BI, lorsqu'elle est connectée aux données de votre atelier de production, offre une visibilité en temps réel qui distingue les fabricants de classe mondiale des entreprises moyennes. L'OEE, l'analyse des causes profondes des temps d'arrêt et les graphiques SPC de qualité fournissent aux équipes opérationnelles les informations nécessaires pour s'améliorer avant que les problèmes ne s'aggravent.

ECOSIRE construit des tableaux de bord de fabrication connectés aux systèmes MES, aux plateformes ERP (Odoo, SAP, Dynamics 365) et aux flux de données IoT. Nos services de développement de tableaux de bord Power BI couvrent l'ensemble de la pile d'analyse de fabrication, depuis la conception de modèles de données jusqu'aux tableaux de bord prêts pour la production.

Contactez notre équipe d'analyse de fabrication pour discuter des sources de données de votre usine et concevoir une plate-forme d'analyse Power BI qui génère une amélioration mesurable du TRS.

E

Rédigé par

ECOSIRE Research and Development Team

Création de produits numériques de niveau entreprise chez ECOSIRE. Partage d'analyses sur les intégrations Odoo, l'automatisation e-commerce et les solutions d'entreprise propulsées par l'IA.

Discutez sur WhatsApp