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. März 202610 Min. Lesezeit2.2k Wörter|

Teil unserer Manufacturing in the AI Era-Serie

Den vollständigen Leitfaden lesen

Fertigungsanalysen in Power BI: OEE, Qualität und Durchsatz

Weltklasse-Produktionsanlagen laufen mit einer OEE von über 85 %. Der durchschnittliche Hersteller liegt bei 60 %. Diese Lücke von 25 Prozentpunkten wirkt sich direkt auf die Kapazität aus – eine Anlage, die die Gesamtanlageneffektivität (OEE) von 60 % auf 85 % verbessert, bringt 41 % mehr Leistung ohne eine einzige neue Maschine oder Anmietung. Der Unterschied zwischen Weltklasse und Durchschnitt liegt fast immer nicht in der Ausrüstung, sondern in der Sichtbarkeit, um Verschwendung zu erkennen, und in den Daten, um diese zu beseitigen.

Power BI, verbunden mit MES (Manufacturing Execution System) und ERP-Daten, sorgt für diese Transparenz. Dieser Leitfaden erstellt eine vollständige Fertigungsanalyseplattform, die OEE-Berechnung, hochwertige SPC-Diagramme, Ausfallzeit-Ursachenanalyse und Durchsatzmanagement umfasst – mit den präzisen DAX-Formeln, die Fertigungsingenieure benötigen.

Wichtige Erkenntnisse

  • OEE = Verfügbarkeit × Leistung × Qualität (Weltklasse = 85 %+)
  • Jede OEE-Komponente erfordert separate Datenströme: Ausfallzeitprotokolle, Produktionszählungen, Ausschussaufzeichnungen – SPC-Diagramme (Statistical Process Control) in Power BI verwenden benutzerdefinierte Visualisierungen oder berechnete Kontrollgrenzen
  • Ausfallzeit-Pareto-Analyse (die wichtigsten 20 % der Gründe verursachen 80 % der Ausfallzeiten) führt zu priorisierten Verbesserungen
  • First Pass Yield (FPY) und Defects per Million Opportunities (DPMO) sind die wichtigsten Qualitäts-KPIs
  • Die Durchsatzanalyse vergleicht die tatsächliche mit der theoretischen Kapazität mithilfe der Engpasstheorie – Power BI-Streaming-Datensätze ermöglichen eine nahezu Echtzeit-Aktualisierung der OEE-Dashboards jede Minute
  • ERP-Integration (Odoo Manufacturing, SAP PP, Dynamics 365 SCM) bietet Arbeitsauftragskontext

Datenmodell für Fertigungsanalysen

Kernfertigungstabellen

Production_Runs (eine Zeile pro Produktionslauf/Arbeitsauftrag):

SpalteBeschreibung
RunIDArbeitsauftrags- oder Produktionslauf-ID
MachineIDFK zu Maschinenmaß
ProductIDFK zum Produkt
ShiftIDFK zu Shift
StartTimeFühren Sie Startdatum/Uhrzeit
EndTimeFühren Sie end datetime
PlannedStartTimeGeplanter Start
PlannedEndTimeGeplantes Ende
PlannedQuantitySollausbringungsmenge
ActualQuantityTatsächlich produzierte Einheiten
GoodQuantityEinheiten bestehen die Qualitätsprüfung
ScrapQuantityDefekte Einheiten
ReworkQuantityNacharbeitsbedürftige Einheiten
IdealCycleTimeSekunden pro Einheit bei Designgeschwindigkeit

Downtime_Events (eine Zeile pro Unterbrechung):

SpalteBeschreibung
DowntimeIDEindeutige ID
MachineIDFK zur Maschine
RunIDFK zum Produktionslauf (falls zutreffend)
StartTimeAusfallzeitbeginn
EndTimeEnde der Ausfallzeit
DurationMinutesGesamte Ausfallzeitdauer
DowntimeCategoryGeplant (PM, Umstellung) / Ungeplant
DowntimeReasonCodeSpezifischer Ursachencode
DowntimeReasonDescBeschreibung
IsScheduledMaintenanceFlag „Geplante Wartung“
ResponseTimeMinutesZeit, bis der Techniker reagiert
RepairTimeMinutesAktive Reparaturzeit

Quality_Events (eine Zeile pro Fehler/Inspektion):

SpalteBeschreibung
InspectionIDEindeutige ID
RunIDFK zum Produktionslauf
MachineIDFK zur Maschine
InspectionDateDatum/Uhrzeit der Inspektion
DefectCodeFK zum Fehlertyp
DefectCountAnzahl der gefundenen Mängel
SampleSizeInspizierte Einheiten
MeasuredValueVariablenmessung (für SPC)
IsInSpecBoolescher Wert – innerhalb der Toleranz

Dim_Machine:

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

Dim_Shift:

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

OEE-Berechnung in Power BI

OEE = Verfügbarkeit × Leistung × Qualität

Verfügbarkeit

Verfügbarkeit = tatsächliche Laufzeit / geplante Produktionszeit

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

Leistung

Leistung = (ideale Zykluszeit × Gesamtanzahl) / tatsächliche Laufzeit Oder äquivalent: Tatsächliche Leistung / Theoretische Maximalleistung

// 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ät

Qualität = Guter Output / Gesamtoutput (ohne alle Mängel)

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

Gesamt-OEE

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

Ausfallzeitanalyse

Ausfallzeit-KPIs und 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
)

Ausfallzeit-Heatmap

Erstellen Sie eine Heatmap der Ausfallzeiten nach Maschine × Tageszeit, um schichtbezogene Muster zu identifizieren:

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

Qualitätsanalyse: SPC-Diagramme

Statistische Prozesskontrolldiagramme überwachen, ob ein Prozess unter Kontrolle ist. Power BI erstellt SPC-Diagramme mithilfe von Kontrollgrenzenberechnungen in DAX.

Kontrollgrenzen für X-Balkendiagramm

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

Wichtige Qualitäts-KPIs

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

Durchsatzanalyse

Produktionsdurchsatz-KPIs

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

Line-Balancing-Analyse

Identifizieren Sie Engpassmaschinen mithilfe des Durchsatzvergleichs:

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

Manufacturing Dashboard-Architektur

Seite 1: OEE-Zusammenfassung

  • OEE-Anzeige (aktuelles vs. Weltklasse-Ziel von 85 %)
  • Verfügbarkeit, Leistung, Qualität – drei KPI-Karten
  • OEE-Trend 30 Tage (Liniendiagramm)
  • OEE nach Maschine (Balkendiagramm, sortiert von unten nach oben)
  • OEE nach Schicht (Balkendiagramm – Unterschiede in der Schichtleistung identifizieren)
  • OEE-Heatmap (Maschine × Wochentag)

Seite 2: Ausfallzeitanalyse

  • Gesamte ungeplante Ausfallstunden (KPI-Karte)
  • MTBF und MTTR (zwei KPI-Karten)
  • Ausfallzeit-Pareto (Kombination Balken + Linie mit kumuliertem %)
  • Ausfallzeiten pro Maschine (horizontales Balkendiagramm)
  • Ausfallzeiten nach Schicht (gruppierte Leiste)
  • Ausfallzeittrend 90 Tage (Liniendiagramm)
  • Aktive Ausfallzeitereignisse (Echtzeittabelle beim Streaming)

Seite 3: Qualitäts-Dashboard

  • First Pass Yield (Messwert vs. Zielwert)
  • DPMO und Sigma Level (KPI-Karten)
  • Ausschussrate nach Produkt (Balkendiagramm)
  • COPQ-Trend (Liniendiagramm, das die Kosten von Qualitätsproblemen zeigt)
  • Fehlerpareto durch Fehlercode
  • SPC-Diagramm (Liniendiagramm mit UCL-, LCL-, UWL-, LWL-Referenzlinien)

Seite 4: Durchsatz und Kapazität

  • Zeitplanerreichung % (Anzeige)
  • Tatsächliche vs. geplante Produktion (gruppierter Balken nach Tag)
  • Auslastung pro Maschine (Heatmap)
  • Rüstzeitanalyse (Balkendiagramm nach Produkt/Maschine)
  • Produktionsleistungstrend (Flächendiagramm, Ist vs. Ziel)
  • Tabelle zur Hervorhebung von Maschinenengpässen

Häufig gestellte Fragen

Was ist OEE und warum ist es für die Fertigung wichtig?

OEE (Overall Equipment Effectiveness) ist die Goldstandard-Metrik für die Fertigungsproduktivität. Es kombiniert drei Faktoren: Verfügbarkeit (Geräte laufen, wenn sie sollen), Leistung (läuft mit der richtigen Geschwindigkeit) und Qualität (Produktion guter Teile). Eine OEE von 60 % bedeutet, dass Sie nur 60 % Ihrer theoretischen Kapazität realisieren – die anderen 40 % sind Verschwendung. Die Verbesserung der OEE steigert direkt den Output, ohne dass Kapitalinvestitionen in neue Geräte erforderlich sind.

Kann Power BI eine Verbindung zu MES-Systemen für OEE in Echtzeit herstellen?

Ja – die meisten MES-Systeme (Ignition SCADA, GE Proficy, Siemens MES, Rockwell FactoryTalk) unterstützen Datenbankkonnektivität (SQL Server, Oracle) oder REST-API-Zugriff. Power BI stellt eine Verbindung zu diesen Datenbanken her und kann Streaming-Datensätze für Aktualisierungen nahezu in Echtzeit verwenden (alle 30 Sekunden bis 1 Minute). Für echte OEE in Echtzeit (unter einer Sekunde) verwenden Sie Azure IoT Hub oder Event Hub mit Power BI-Streaming-Datensätzen, die direkt von Sensoren in der Fabrikhalle übertragen werden.

Welche Daten benötigt eine Fabrik, um mit der Verfolgung der OEE zu beginnen?

Mindestdatenanforderungen für die grundlegende OEE: (1) Produktionszähldaten – wann lief die Maschine und wie viele Einheiten wurden produziert, (2) Ausfallzeiten – wann wurde die Maschine angehalten und warum, (3) Qualität zählt – wie viele gute vs. defekte Einheiten. Dies kann aus manuellen Bedienereingaben (Excel/Papier → Power BI), grundlegenden MES- oder SPS-Zählerdaten stammen. Für den Anfang sind keine perfekten Daten erforderlich – selbst eine unvollständige OEE-Transparenz führt zu Verbesserungen.

Wie erstelle ich ein SPC-Diagramm in Power BI?

Erstellen Sie ein Liniendiagramm mit den Messwerten als Hauptreihe. Fügen Sie vier zusätzliche Kennzahlen (UCL, LCL, UWL, LWL) als separate Linienreihen im Diagramm hinzu. Formatieren Sie UCL/LCL als rot gestrichelte Linien und UWL/LWL als orange gestrichelte Linien. Durch die bedingte Formatierung von Datenpunkten werden außer Kontrolle geratene Punkte rot hervorgehoben. Das integrierte benutzerdefinierte SPC-Visual von AppSource ermöglicht die Erkennung von Western Electric-Regeln (Läufe über/unter der Mitte, Trends usw.) über den grundlegenden Kontrollgrenzenansatz hinaus.

Was ist ein realistischer Zeitplan für die Implementierung eines Power BI-Fertigungsdashboards?

Ein einfaches OEE-Dashboard (einzelne Maschine, manuelle Dateneingabe über SharePoint-Liste oder Excel) kann in 1–2 Wochen erstellt werden. Eine vollständige Fertigungsanalyseplattform mit Anbindung an MES und ERP (mehrere Maschinen, mehrere Linien, mit Qualitäts-SPC, Ausfallzeit-Pareto und Durchsatzanalyse) dauert in der Regel 6–12 Wochen. Die längste Phase ist immer die Datenintegration und Datenqualität – Maschinenzeitstempel, Ausfallzeit-Ursachencodes und Produktwechsel müssen konsistent erfasst werden, bevor Analysen einen Mehrwert schaffen.

Wie verbindet ECOSIRE Power BI mit Odoo Manufacturing?

Odoo Manufacturing speichert Produktionsarbeitsaufträge, Materialverbrauch, Qualitätsprüfungen und Wartungsanfragen in PostgreSQL. ECOSIRE verbindet Power BI direkt mit der PostgreSQL-Datenbank von Odoo (auf einer Lesereplikat) und modelliert die Fertigungstabellen (mrp.produktion, mrp.workcenter, qualität.check, Wartung.request) in das in diesem Handbuch beschriebene OEE-Datenmodell. Im Rahmen unserer Odoo ERP-Integrationspraxis kümmern wir uns um die Kapazitätsplanung und Qualitätsintegration auf Arbeitsplatzebene.


Nächste Schritte

Fertigungsanalysen in Power BI bieten – wenn sie mit Ihren Produktionsdaten verknüpft sind – die Echtzeittransparenz, die Weltklassehersteller von durchschnittlichen Herstellern unterscheidet. OEE, Ausfallursachenanalyse und hochwertige SPC-Diagramme geben den Betriebsteams die Informationen, die sie verbessern können, bevor sich Probleme verschlimmern.

ECOSIRE erstellt Fertigungs-Dashboards, die mit MES-Systemen, ERP-Plattformen (Odoo, SAP, Dynamics 365) und IoT-Datenströmen verbunden sind. Unsere Power BI-Dashboard-Entwicklungsdienste decken den gesamten Fertigungsanalyse-Stack ab, vom Datenmodellentwurf bis hin zu produktionsbereiten Dashboards.

Kontaktieren Sie unser Fertigungsanalyseteam, um Ihre Produktionsdatenquellen zu besprechen und eine Power BI-Analyseplattform zu entwerfen, die messbare OEE-Verbesserungen vorantreibt.

E

Geschrieben von

ECOSIRE Research and Development Team

Entwicklung von Enterprise-Digitalprodukten bei ECOSIRE. Einblicke in Odoo-Integrationen, E-Commerce-Automatisierung und KI-gestützte Geschäftslösungen.

Chatten Sie auf WhatsApp