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
|2026年3月19日7 分で読める1.5k 語数|

Manufacturing in the AI Eraシリーズの一部

完全ガイドを読む

Power BI での製造分析: OEE、品質、スループット

世界クラスの製造施設は 85% 以上の OEE で稼働しています。平均的なメーカーは 60% で稼働しています。この 25 パーセント ポイントの差は、生産能力に直接反映されます。OEE が 60% から 85% に向上する施設では、新しい機械を 1 台も導入することなく、生産量が 41% 増加します。世界クラスと平均の違いは、ほとんどの場合、設備ではありません。無駄を確認できる可視性と、それを排除するためのデータです。

MES (製造実行システム) および ERP データに接続された Power BI は、その可視性を提供します。このガイドでは、製造エンジニアが必要とする正確な DAX 式を使用して、OEE 計算、高品質 SPC チャート、ダウンタイム根本原因分析、スループット管理をカバーする完全な製造分析プラットフォームを構築します。

重要なポイント

  • OEE = 可用性 × パフォーマンス × 品質 (世界クラス = 85%+)
  • 各 OEE コンポーネントには個別のデータ ストリームが必要です: ダウンタイム ログ、生産数、スクラップ レコード
  • Power BI の SPC (統計的プロセス管理) チャートは、カスタム ビジュアルまたは計算された管理限界を使用します。
  • ダウンタイムのパレート分析 (ダウンタイムの 80% の原因の上位 20% の理由) により、優先順位の高い改善が促進されます
  • ファーストパス歩留まり (FPY) と 100 万機会あたりの欠陥数 (DPMO) が重要な品質 KPI です
  • スループット分析では、ボトルネック理論を使用して実際の容量と理論上の容量を比較します
  • Power BI ストリーミング データセットにより、ほぼリアルタイムの OEE ダッシュボードを毎分更新できます
  • ERP 統合 (Odoo Manufacturing、SAP PP、Dynamics 365 SCM) により、作業指示コンテキストが提供されます

製造分析用のデータ モデル

コア製造テーブル

Production_Runs (生産実行/作業指示ごとに 1 行):

コラム説明
コード0作業指示書または生産実行 ID
コード0FK から機械の寸法
コード0FK から製品へ
コード0FKからシフト
コード0実行開始日時
コード0実行終了日時
コード0開始予定
コード0終了予定
コード0目標生産量
コード0実際の生産台数
コード0品質検査に合格したユニット
コード0欠陥のあるユニット
コード0再作業が必要なユニット
コード0設計速度でのユニットあたりの秒数

Downtime_Events (停止ごとに 1 行):

コラム説明
コード0固有の ID
コード0FKからマシンへ
コード0本番稼働への FK (該当する場合)
コード0ダウンタイム開始
コード0ダウンタイム終了
コード0ダウンタイムの合計期間
コード0計画(PM、異動)/計画外
コード0特定の理由コード
コード0説明
コード0計画メンテナンスフラグ
コード0技術者が応答するまでの時間
コード0有効な修復時間

Quality_Events (欠陥/検査ごとに 1 行):

コラム説明
コード0固有の ID
コード0本番稼働への FK
コード0FKからマシンへ
コード0検査日時
コード0FK から欠陥タイプへ
コード0見つかった欠陥の数
コード0検査されたユニット
コード0変数測定(SPC用)
コード0ブール値 — 許容範囲内

Dim_Machine:

  • MachineIDMachineNameLineCellDepartmentMachineTypeIdealRunRatePlannedCapacity

ディム_シフト:

  • ShiftIDShiftNameStartTimeEndTimePlannedMinutesPlannedBreakMinutes

Power BI での OEE の計算

OEE = 可用性 × パフォーマンス × 品質

可用性

可用性 = 実際の稼働時間 / 計画された生産時間

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

パフォーマンス

パフォーマンス = (理想的なサイクル タイム × 合計数) / 実際の実行時間 または同等: 実際の出力 / 理論上の最大出力

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

品質

品質 = 良好な生産高 / 総生産高 (すべての欠陥を除く)

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

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

ダウンタイム分析

ダウンタイム KPI とパレート

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

ダウンタイムのヒートマップ

シフト関連のパターンを特定するために、マシン × 時刻ごとのダウンタイムのヒートマップを作成します。

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

品質分析: SPC チャート

統計的プロセス管理チャートは、プロセスが制御されているかどうかを監視します。 Power BI は、DAX の管理限界計算を使用して SPC チャートを作成します。

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

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

スループット分析

生産スループット KPI

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

ラインバランシング解析

スループットの比較を使用してボトルネック マシンを特定します。

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

製造ダッシュボードのアーキテクチャ

ページ 1: OEE の概要

  • OEE ゲージ (現在対世界クラスの 85% 目標)
  • 可用性、パフォーマンス、品質 — 3 つの KPI カード
  • OEE トレンド 30 日 (折れ線グラフ)
  • マシン別の OEE (棒グラフ、低位から高位に並べ替え)
  • シフト別の OEE (棒グラフ - シフトのパフォーマンスの違いを特定)
  • OEE ヒートマップ (マシン × 曜日)

ページ 2: ダウンタイム分析

  • 計画外ダウンタイムの合計時間 (KPI カード)
  • MTBF および MTTR (2 枚の KPI カード)
  • ダウンタイム パレート (棒グラフと累積 % の線の組み合わせ)
  • マシン別のダウンタイム (横棒グラフ)
  • シフト別のダウンタイム(グループ化されたバー)
  • 90 日間のダウンタイム傾向 (折れ線グラフ)
  • アクティブなダウンタイム イベント (ストリーミングの場合はリアルタイム テーブル)

ページ 3: 品質ダッシュボード

  • ファーストパスの歩留まり(ゲージ対ターゲット)
  • DPMO およびシグマ レベル (KPI カード)
  • 製品別のスクラップ率(棒グラフ)
  • COPQ トレンド (品質問題のコストを示す折れ線グラフ)
  • 欠陥コードによる欠陥パレート
  • SPC チャート (UCL、LCL、UWL、LWL の基準線を含む折れ線グラフ)

ページ 4: スループットと容量

  • スケジュール達成率(ゲージ)
  • 実際の生産量と計画された生産量(日ごとにグループ化されたバー)
  • マシン別の容量使用率 (ヒートマップ)
  • 切り替え時間分析(製品/マシン別の棒グラフ)
  • 生産高推移(面グラフ、実績対目標)
  • ボトルネックマシンのハイライトテーブル

よくある質問

OEE とは何ですか?また、それが製造にとって重要な理由は何ですか?

OEE (総合設備効率) は、製造生産性のゴールドスタンダード指標です。これは、可用性 (必要なときに装置が稼働する)、パフォーマンス (適切な速度で稼働する)、および品質 (良好な部品を生産する) の 3 つの要素を組み合わせたものです。 60% の OEE は、理論上の容量の 60% のみを実現していることを意味します。残りの 40% は無駄です。 OEE を改善すると、新しい設備への資本投資を行わずに生産量が直接増加します。

Power BI はリアルタイム OEE のために MES システムに接続できますか?

はい - ほとんどの MES システム (Ignition SCADA、GE Proficy、Siemens MES、Rockwell FactoryTalk) は、データベース接続 (SQL Server、Oracle) または REST API アクセスをサポートしています。 Power BI はこれらのデータベースに接続し、ストリーミング データセットを使用してほぼリアルタイム (30 秒から 1 分ごと) に更新できます。真のリアルタイム OEE (1 秒未満) を実現するには、工場現場のセンサーから直接プッシュされた Power BI ストリーミング データセットを備えた Azure IoT Hub または Event Hub を使用します。

工場が OEE の追跡を開始するにはどのようなデータが必要ですか?

基本的な OEE の最小データ要件: (1) 生産数データ — 機械が稼働した時期と生産されたユニットの数、(2) ダウンタイム イベント — 機械がいつ停止したか、およびその理由、(3) 品質カウント — 良品と欠陥のあるユニットの数。これは、オペレーターの手動入力 (Excel/紙 → Power BI)、基本的な MES、または PLC カウンター データから取得される可能性があります。開始するのに完璧なデータは必要ありません。OEE の可視性が不完全であっても、改善は促進されます。

Power BI で SPC チャートを作成するにはどうすればよいですか?

測定値を主系列とする折れ線グラフを作成します。チャートに個別の折れ線シリーズとして 4 つの追加メジャー (UCL、LCL、UWL、LWL) を追加します。 UCL/LCL を赤い破線として、UWL/LWL をオレンジ色の破線としてフォーマットします。データ ポイントの条件付き書式設定では、制御範囲外のポイントが赤色で強調表示されます。 AppSource の組み込み SPC カスタム ビジュアルは、基本的な管理限界アプローチを超えた Western Electric ルール検出 (中心の上/下での実行、傾向など) を提供します。

Power BI 製造ダッシュボードを実装するための現実的なスケジュールはどれくらいですか?

基本的な OEE ダッシュボード (単一マシン、SharePoint リストまたは Excel による手動データ入力) は 1 ~ 2 週間で構築できます。 MES および ERP に接続された完全な製造分析プラットフォーム (高品質 SPC、ダウンタイム パレート分析、およびスループット分析を備えた複数マシン、複数ライン) には、通常 6 ~ 12 週間かかります。最も長いフェーズは常にデータ統合とデータ品質です。分析で価値を付加する前に、マシンのタイムスタンプ、ダウンタイム理由コード、製品切り替えを一貫して取得する必要があります。

ECOSIRE は Power BI を Odoo Manufacturing にどのように接続しますか?

Odoo Manufacturing は、生産作業指示、資材消費、品質チェック、メンテナンス リクエストを PostgreSQL に保存します。 ECOSIRE は、Power BI を Odoo の PostgreSQL データベース (読み取りレプリカ上) に直接接続し、製造テーブル (mrp.production、mrp.workcenter、quality.check、maintenance.request) をこのガイドで説明されている OEE データ モデルにモデル化します。私たちは、Odoo ERP 統合実践の一環として、ワーク センター レベルのキャパシティ プランニングと品質統合を扱います。


次のステップ

Power BI の製造分析は、生産現場のデータに接続すると、世界クラスの製造業者と平均的な業績を区別するリアルタイムの可視性を提供します。 OEE、ダウンタイムの根本原因分析、高品質の SPC チャートにより、問題が悪化する前に改善すべき情報が運用チームに提供されます。

ECOSIRE は、MES システム、ERP プラットフォーム (Odoo、SAP、Dynamics 365)、IoT データ ストリームに接続された製造ダッシュボードを構築します。当社の Power BI ダッシュボード開発サービス は、データ モデルの設計から運用準備が整ったダッシュボードまで、製造分析スタック全体をカバーしています。

製造分析チームにお問い合わせ して、工場現場のデータ ソースについて話し合い、目に見える OEE 改善を推進する Power BI 分析プラットフォームを設計してください。

E

執筆者

ECOSIRE Research and Development Team

ECOSIREでエンタープライズグレードのデジタル製品を開発。Odoo統合、eコマース自動化、AI搭載ビジネスソリューションに関するインサイトを共有しています。

WhatsAppでチャット