生産計画データテンプレート
生産計画データテンプレート
- 収集を推奨する属性
- 追跡する主なアクティビティ
- Microsoft Dynamics 365 Manufacturingからのデータ抽出ガイド
生産計画の属性
| 名前 | 説明 | ||
|---|---|---|---|
| 製造オーダー ProductionOrderNumber | 製造オーダーを一意に識別するIDです。関連する計画と実行のアクティビティを追跡するための、主なケースIDとして使われます。 | ||
| 説明 製造オーダー番号は、Microsoft Dynamics 365ではProdIdと呼ばれることが多く、特定の製造ジョブに関連するすべてのイベント、材料、リソース、コストを結び付ける中心的な識別子です。1つの作業単位について、生産計画から実行、完了、原価計算までの全体を分析できます。 プロセスマイニングでは、関連するイベントを1つのケースにまとめるために、この属性が欠かせません。製造オーダー番号ごとにプロセスを分析すると、初期作成やスケジュール設定から完了、原価計算までの標準的な生産フローにおけるボトルネック、遅延、逸脱を特定できます。 重要な理由 これは基本となるケース識別子です。関連するすべてのイベントをまとめ、生産計画プロセス全体を再構成して分析するうえで欠かせません。 入手先 Microsoft Dynamics 365 ManufacturingのProdTableテーブルにある「ProdId」フィールドです。 例 WO-000456WO-000457WO-000458 | |||
| アクティビティ名 ActivityName | 生産計画プロセスで発生した、特定の業務イベントまたは手順の名前です。 | ||
| 説明 アクティビティ名は、「製造オーダーの作成」「生産用材料のピッキング」「生産開始」など、生産計画の一連の流れにおける個々の手順を表します。これらのアクティビティがプロセスマップを構成します。 アクティビティの順序や所要時間を分析すると、プロセスの流れを可視化し、よくある経路や手戻りのループを特定し、各段階にかかる時間を測定できます。プロセスの各時点で何が起きているかを把握するための重要な属性です。 重要な理由 この属性はプロセスの手順を定義し、プロセスマップの作成や、プロセスの流れ、ばらつき、ボトルネックの分析に役立ちます。 入手先 通常はイベントログから取得するか、「ProdRouteTrans」や「ProdJournalBOM」などのテーブルにある取引種別や「ProdTable」のステータスフィールドの変更を対応付けて導出します。 例 製造オーダーの作成製造オーダーのリリース生産開始生産完了の報告 | |||
| イベント時刻 EventTime | アクティビティが発生した時刻を示す、正確なタイムスタンプです。 | ||
| 説明 イベント時刻、つまりタイムスタンプには、特定のアクティビティが発生した正確な日時が記録されます。サイクルタイムの計算、手順間の遅延の特定、時間の経過に伴うプロセスのパフォーマンス把握など、時間に基づくプロセスマイニング分析の基礎となるデータです。 生産計画では、この属性を使って計画のリードタイム、生産開始の遅れ、オーダー処理全体にかかる時間などを測定します。正確で時系列に沿ったタイムスタンプは、適切で意味のあるプロセスモデルを作成するうえで欠かせません。 重要な理由 このタイムスタンプは、イベントの順序付けやアクティビティ間の所要時間の計算に欠かせません。サイクルタイムやボトルネックの特定など、時間に基づく分析にも使います。 入手先 「ProdTable」の「createdDateTime」や、「ProdRouteTrans」「ProdJournalRoute」「ProdJournalBOM」の取引日フィールドなど、さまざまな取引テーブルにあります。 例 2023-04-15T09:00:12Z2023-04-15T11:30:00Z2023-04-16T14:22:05Z | |||
| ソースシステム SourceSystem | データの抽出元となった記録システムです。 | ||
| 説明 この属性は、イベントデータの発生元となった情報システムを示します。このプロセスビューでは、値は常に「Microsoft Dynamics 365 Manufacturing」です。 複数のシステムが連携する環境では、データの来歴の追跡、データ品質の問題の調査、各システムがプロセス全体にどう関わるかの把握に、このフィールドが欠かせません。分析対象のデータの出所を明確にできます。 重要な理由 データの出所に関する重要なコンテキストを示します。データガバナンスや検証、複数の基幹システムからのデータパイプライン管理に欠かせません。 入手先 データセットの出所を示す固定値です。データの抽出と変換の際に追加します。 例 Microsoft Dynamics 365 ManufacturingD365 F&O | |||
| 最終データ更新 LastDataUpdate | このイベントのデータがソースシステムから最後に更新または抽出された日時を示すタイムスタンプです。 | ||
| 説明 この属性には、ソースシステムからデータを最後に取得した日時が記録されます。分析データがどの程度新しいかを把握するための重要なメタデータです。 最終更新日時が分かると、アナリストや業務担当者はプロセスマイニングツールのインサイトを信頼しやすくなります。ダッシュボードがリアルタイムの情報を示しているのか、過去のある時点のデータを示しているのかを確認できるため、業務上の意思決定にも役立ちます。 重要な理由 この属性はデータガバナンスに欠かせません。データの新しさを把握し、プロセスに関するインサイトが適時に得られたものかを確認できます。 入手先 このタイムスタンプは、データの抽出、変換、読み込み(ETL)の際に生成され、各レコードに記録されます。 例 2023-05-20T05:00:00Z2023-05-21T05:00:00Z | |||
| ユーザー UserId | アクティビティを実行したユーザー、またはその担当者を識別する情報です。 | ||
| 説明 ユーザーIDは、オーダーのリリースや完了報告など、特定のプロセスステップを実行した従業員またはシステムアカウントを識別します。この情報から、プロセス内の作業を誰が行っているかを把握できます。 ユーザー別にプロセスを分析すると、作業負荷の分布や研修が必要な領域を把握し、個人やチーム間のパフォーマンスを比較できます。また、特定のユーザーによる逸脱の調査にも役立ちます。コンプライアンスの確保や監査証跡の管理にも重要な情報です。 重要な理由 ユーザーやチームごとのプロセスパフォーマンスを分析し、自動化の可能性を見つけるとともに、主要なプロセスアクティビティの監査証跡を確認できます。 入手先 各種テーブルのmodifiedByやcreatedByなどのフィールド、またはProdJournalTableなどのトランザクションログテーブルにあるユーザーフィールドに記録されています。 例 j.smithm.jonesAX_BATCH_SVC | |||
| 実績数量 ActualQuantity | 製造され、オーダーの完成品として報告された良品の数量です。 | ||
| 説明 実績数量は、製造オーダーで完成し、品質検査に合格した品目の数を示します。この値は、製造完了の報告時に記録されます。 この属性は、製造歩留まりや効率の分析に使います。実績数量と計画数量を比較すると、スクラップ率を算出し、製造ロスを把握できます。また、スループット分析やキャパシティ利用率のダッシュボードにも欠かせないデータです。 重要な理由 製造歩留まり、スクラップ率、実際のスループットを算出し、製造効率やパフォーマンスを把握するために必要です。 入手先 オーダーの完成報告時に、ProdTableテーブルのQtyGoodフィールドや、関連する仕訳転記テーブルから取得することがよくあります。 例 100985000 | |||
| 製品番号 ProductNumber | 製造する品目を一意に識別する番号です。 | ||
| 説明 製品番号(品目ID)は、製造オーダーで生産する完成品を示します。製造プロセスを対象製品に結び付けるとともに、その製品に関連する部品表や工程指示を特定できます。 製品番号ごとにプロセスを分析すると、製品ごとの製造ライフサイクルの違いを明らかにできます。特定の製品でサイクルタイムが長い、手直しが多い、遅延が頻発するといった傾向を把握でき、製品やプロセスのエンジニアにとって有用な情報になります。 重要な理由 製造する製品ごとのプロセスの違いを分析し、製品固有のボトルネックや品質上の問題を特定できます。 入手先 ProdTableテーブルのItemIdフィールドです。 例 FG-1001FG-2050ASSY-500B | |||
| 製造オーダーのステータス ProductionOrderStatus | 製造オーダーの現在のライフサイクル上のステータスを示します。 | ||
| 説明 製造オーダーのステータスは、製造工程におけるオーダーの進捗を示します。Dynamics 365で一般的なステータスには、「作成済み」「見積もり済み」「スケジュール済み」「リリース済み」「開始済み」「完了報告済み」「終了済み」などがあります。この属性から、各オーダーの現在の状況を把握できます。 プロセスマイニングでは、ステータスの変更を分析することで、アクティビティを定義し、プロセスの流れを把握できます。特定の状態にあるオーダーの絞り込み、各ステータスの継続時間の分析、停滞または遅延しているオーダーの特定にも使えます。 重要な理由 この属性はオーダーの進捗を大まかに把握するためのもので、絞り込み、適合性チェック、生産の各段階にかかる時間の分析に欠かせません。 入手先 「ProdTable」テーブルの「ProdStatus」フィールドです。 例 スケジュール済みリリース済み開始済み終了済み | |||
| 製造タイプ ProductionType | 標準、手直し、プロジェクト向けなど、製造オーダーの分類です。 | ||
| 説明 製造タイプは、目的に応じてオーダーを分類します。たとえば、標準オーダーは通常の在庫生産、手直しオーダーは以前に生産した品目の不具合修正、プロジェクトオーダーは特定の顧客プロジェクトに関連する生産を指します。 この属性は、比較可能な分析ビューを作成するうえで重要です。手直しオーダーのプロセスは、標準オーダーとは本質的に異なります。製造タイプ別にプロセス分析を分類することで、意味のある比較ができ、それぞれのタイプに固有の課題や作業の流れを把握できます。 重要な理由 標準や手直しなど、オーダーの種類によってプロセスやパフォーマンスの基準が異なるため、分析を分類する際に役立ちます。 入手先 ProdTableテーブルのProdTypeフィールドです。 例 標準手直しプロジェクト | |||
| 製造優先度 ProductionPriority | 製造オーダーの緊急度や優先順位を示す評価です。 | ||
| 説明 製造優先度は、計画担当者やスケジューラーが現場の作業順序を管理するために使うフィールドです。優先度の高いオーダーを前倒しすると、ほかのオーダーの計画に影響する場合があります。 この属性を分析すると、優先度の高いオーダーや前倒しオーダーによって製造計画がどの程度変更されているかを把握できます。オーダーのライフサイクルを通じて優先度の変更を追跡すると、需要や計画の不安定さが見えてきます。「前倒し製造の傾向」ダッシュボードや「前倒し製造率」の重要業績評価指標(KPI)にも使われます。 重要な理由 前倒しオーダーの頻度と影響を把握し、計画の不安定さや場当たり的な業務管理の兆候を特定できます。 入手先 ProdTableテーブルの標準フィールドまたはカスタムフィールドの場合があります。設定は会社ごとに異なることがよくあります。 例 通常高緊急 | |||
| 製造拠点 ProductionPlant | 製造オーダーを実行する製造施設または工場です。 | ||
| 説明 製造拠点は、製造プロセスを担う物理的な場所や施設を示します。製造パフォーマンスを分類して比較するための、組織上の重要な区分です。 プロセスマイニングでは、この属性を使って製造拠点ごとのパフォーマンスを比較できます。分析担当者は、拠点間でサイクルタイム、リソース利用率、標準プロセスの遵守状況を比較し、優れた取り組みや業務改善が必要な施設を特定できます。キャパシティ利用率の分析にも欠かせません。 重要な理由 製造拠点ごとのパフォーマンスを比較・評価し、優れた取り組みや地域固有の課題を特定できます。 入手先 ProdTableテーブルのInventSiteIdフィールドです。 例 SITE-ASITE-BMain-WH | |||
| 計画終了日 PlannedEndDate | 製造オーダーの完了予定日時です。 | ||
| 説明 計画終了日は、スケジューリングエンジンが算出する製造オーダーの目標完了日時です。作業時間、リソースカレンダー、リードタイムを考慮し、完成品の準備が整う時期を予測します。 プロセス分析では、この属性を使って期限どおりに完了したかを評価します。計画終了日と実際の完了タイムスタンプ(Production Reported As FinishedまたはProduction Order Endedアクティビティ)を比較すると、期限内製造完了率の重要業績評価指標(KPI)を算出できます。また、納期遅延の根本的な原因の特定にも役立ちます。 重要な理由 期限内完了率の測定や、製造スケジュールの精度分析に用いる基準です。 入手先 ProdTableテーブルのSchedEndフィールドです。 例 2023-04-25T17:00:00Z2023-04-26T17:00:00Z2023-04-27T17:00:00Z | |||
| 計画開始日 PlannedStartDate | 製造オーダーの開始予定日時です。 | ||
| 説明 計画開始日は、スケジューリングの主要な出力項目であり、オーダーの製造作業を開始する目標日時を示します。この日付は、資材の入手状況、リソースのキャパシティ、需要の納期に基づいて決まります。 この属性は、スケジュールの遵守状況を分析するうえで欠かせません。計画開始日と実際の製造開始時刻(Production Startedアクティビティのタイムスタンプ)を比較することで、組織は開始時刻の遵守状況を測定し、遅延の原因を特定して、製造スケジュール遵守率などの重要業績評価指標(KPI)を算出できます。 重要な理由 スケジュールの遵守状況を測定し、計画から実際の製造開始までに生じた遅延を特定するためのベースラインとなります。 入手先 ProdTableテーブルのSchedStartフィールドです。 例 2023-04-18T08:00:00Z2023-04-19T08:00:00Z2023-04-20T08:00:00Z | |||
| 品質オーダー番号 QualityOrderNumber | 製造オーダーに関連付けられた品質管理オーダーの識別番号です。 | ||
| 説明 品質検査が必要な場合、Dynamics 365では品質オーダーが作成されることがよくあります。この属性は、関連する品質オーダーのIDを記録し、製造プロセスと品質保証プロセスを結び付けます。 この関連付けにより、品質管理のステップを含むエンドツーエンドのプロセス全体を確認できます。品質検査が製造リードタイムに与える影響や、品質プロセスの遅延、製品や製造ラインごとの検査頻度を分析できます。 重要な理由 製造プロセスと品質保証プロセスを結び付け、品質検査が全体のリードタイムに与える影響を分析できます。 入手先 この情報は品質管理テーブル(例:InventQualityOrderTable)に保存されており、製造オーダーとの関連付けが必要です。 例 QO-00123QO-00124QO-00125 | |||
| 改訂回数 ProductionOrderRevisionNumber | 製造計画の作成後に、計画が変更された回数です。 | ||
| 説明 この属性は、スケジュール設定またはリリース後に、数量、日付、工程など製造オーダーに加えられた改訂や大幅な変更の回数を追跡します。回数が多いほど、計画が不安定であることを示します。 この値は「製造計画改訂率」の重要業績評価指標(KPI)を直接測定するために使います。分析すると、需要の頻繁な変化や初期計画の精度不足など、計画が不安定になる原因を特定できます。また、手直しや再スケジュールにかかる作業量を定量化できます。こうした作業は、効率の低下につながることがよくあります。 重要な理由 計画の安定性を直接測定し、「製造計画改訂率」の重要業績評価指標(KPI)を確認できます。過度な変更や手直しが発生しているプロセスの特定にも役立ちます。 入手先 算出属性です。ケースごとにProduction Order Adjustedアクティビティの発生回数を数える必要があります。 例 012 | |||
| 期限内開始 ProductionScheduleAdherence | 製造オーダーが計画開始日以前に開始された場合にtrueとなるブール値です。 | ||
| 説明 この算出属性は、製造開始時のスケジュール遵守状況を簡潔な二値で示します。実際の開始タイムスタンプ(Production Startedイベント)とPlannedStartDate属性を比較します。 「製造スケジュール遵守率」などのダッシュボードや重要業績評価指標(KPI)を、明確で簡潔に作成するうえで役立ちます。分析ツールで日付を直接比較しなくても、フィルタリングや集計によって、期限どおりに開始したオーダーの割合や、遅延したオーダーの特徴を簡単に確認できます。 重要な理由 スケジュール遵守状況のレポート作成や重要業績評価指標(KPI)の算出を簡単にし、期限内に開始したオーダーと遅延したオーダーを容易に絞り込み、集計できます。 入手先 算出指標です。ロジックは「Production Started」イベントのEventTime <= PlannedStartDateです。 例 truefalse | |||
| 終了時刻 EndTime | アクティビティの完了時刻を示す正確なタイムスタンプです。 | ||
| 説明 終了時刻は、特定のアクティビティが完了した時刻を示します。開始時刻がアクティビティの開始を示すのに対し、終了時刻はそのステップの実際の所要時間や処理時間を把握するために必要です。 プロセスマイニングでは、アクティビティの開始時刻と終了時刻の両方があると、待ち時間と処理時間をより詳しく分析できます。アクティビティの作業に実際にかかった時間と、次のステップが始まるまでの待ち時間を区別できるため、ボトルネックを詳細に分析するうえで重要です。 重要な理由 アクティビティの処理時間を算出し、待ち時間と区別することで、ボトルネックをより正確に分析できます。 入手先 終了時刻は、別の情報から算出することがよくあります。たとえば、Production Startedの終了時刻をOperation Completedの開始時刻とする方法があります。ログによっては、終了タイムスタンプが明示的に記録されています。 例 2023-04-15T09:30:45Z2023-04-15T12:00:00Z2023-04-16T15:00:10Z | |||
| 製造ライン ProductionLine | 製造オーダーに割り当てられた特定の製造ライン、作業区、またはリソースグループです。 | ||
| 説明 製造ラインは、製造作業を行う特定の機械、セル、またはリソースのグループを示します。製造拠点よりも詳細な情報を確認できます。 製造ライン別の分析は、キャパシティや利用率を詳しく調べるうえで重要です。負荷が集中している作業区の特定、同じ製品を生産するライン間の効率比較、拠点単位では見えにくいリソース固有のボトルネックの特定に役立ちます。 重要な理由 リソースの利用率やパフォーマンスを詳しく分析し、負荷が集中している作業区や効率の低いラインを特定できます。 入手先 この情報は、製造工程のトランザクション(ProdRouteテーブルまたはProdRouteTransテーブル)にあるWrkCtrIdフィールドで確認できることがよくあります。 例 LINE-01LINE-02CNC-A | |||
| 製造開始遅延 ProductionStartDelay | オーダーのリリースから実際の製造開始までにかかった時間です。 | ||
| 説明 この算出期間は、現場での待ち時間やキュー時間を測定します。Production Order ReleasedアクティビティからProduction Startedアクティビティまでの時間差です。 計画が完了し、オーダーの実行準備が整った後に発生する遅延を特定できるため、「リソース割り当て遅延分析」ダッシュボードに欠かせない重要業績評価指標(KPI)です。値が大きい場合は、リソースの確保、資材の準備、現場への情報伝達に問題がある可能性があります。業務改善に向けた対象を明確にできます。 重要な理由 開始準備が整ってから実際に開始するまでの遅延を正確に測定し、リソースの確保や現場の準備に関するボトルネックを特定できます。 入手先 算出指標です:Timestamp('Production Started') - Timestamp('Production Order Released')。 例 0日4時間15分1日2時間0分0日1時間30分 | |||
| 計画数量 PlannedQuantity | 製造を計画している品目の数量です。 | ||
| 説明 計画数量は、特定の製造オーダーで生産する目標数量です。通常、販売オーダーの需要、安全在庫の要件、または基準生産計画に基づいて決まります。 この属性は、歩留まりやスクラップなどのパフォーマンス指標を測定するためのベースラインになります。計画数量と実績数量を比較すると、計画担当者は製造効率や資材の差異を確認できます。キャパシティ計画や資材所要量計画の基本となるデータです。 重要な理由 実際の製造数量と比較して、製造歩留まりやスクラップ率を測定するための基準数量です。 入手先 ProdTableテーブルのQtySchedフィールドです。 例 1005000250 | |||
| 資材の入手状況 MaterialAvailabilityStatus | 製造オーダーに必要な原材料が入手可能かどうかを示します。 | ||
| 説明 この属性は、製造に必要な部品の準備状況を追跡します。「入手可能」「発注済み」「不足」などのステータスを示します。製造オーダーを計画どおりに開始できるかを判断するため、スケジューラーにとって重要な情報です。 プロセスマイニングでは、この属性を使って製造開始の遅延原因を調べます。このステータスとProduction Order ReleasedからProduction Startedまでの時間を関連付けると、資材不足がスケジュールの遵守状況や全体のサイクルタイムに与える影響を定量化できます。「資材入手遅延の影響」ダッシュボードにも役立ちます。 重要な理由 資材不足による製造開始の遅延を把握して定量化し、サプライチェーンのパフォーマンスと製造効率の関係を確認するうえで重要です。 入手先 このステータスは単一のフィールドではなく、InventSumテーブルを使って製造オーダーの部品表(BOM)にある全品目の手持在庫を確認し、算出することがよくあります。 例 すべて入手可能一部不足入手不可 | |||
生産計画のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 生産完了の報告 | 指定数量の製品について製造作業が物理的に完了し、完成品が在庫に入ったことを示します。在庫取引を発生させる重要なステータス更新です。 | ||
| 重要な理由 これは実際の生産の終了を示します。納期どおりの完了率、実際の生産期間、スループットを計算するうえで欠かせません。 入手先 ProdTableの製造オーダーのステータスが「完了報告済み」に変わった時点で記録します。「完了報告」仕訳の転記によって発生します。 記録 ProdTableのProdStatusフィールドが「完了報告済み」に変わった時刻を検出します。 イベントタイプ inferred | |||
| 生産開始 | 製造現場でオーダーの実作業が始まったことを示します。通常、製造現場の端末から最初の作業またはジョブを開始した時点、あるいは仕訳を転記した時点で記録されます。 | ||
| 重要な理由 このアクティビティから実際の生産開始時刻が分かります。開始の遅れ、スケジュールの遵守状況、実際のリードタイムを計算するうえで重要です。 入手先 ProdTableの製造オーダーのステータスが「開始済み」に変わった時点で記録します。通常、最初の作業について作業カードまたは工程カードの仕訳を転記すると発生します。 記録 ProdTableのProdStatusフィールドが「開始済み」に変わった時刻を検出します。 イベントタイプ inferred | |||
| 製造オーダーのスケジュール設定 | このアクティビティは、製造オーダーのスケジュール設定を示します。作業に必要なリソース、日付、時刻を割り当てる手順です。作業工程のスケジュール設定や、より詳細なジョブのスケジュール設定が含まれる場合があります。 | ||
| 重要な理由 スケジュール設定は、キャパシティ計画とリソース管理に欠かせません。オーダーのスケジュール設定にかかる時間や、リリースまでの間隔を分析すると、計画やキャパシティの制約が分かります。 入手先 ProdTableの製造オーダーのステータスが「スケジュール済み」に変わった時点で記録します。ユーザーがスケジュール設定機能を実行すると発生します。 記録 ProdTableのProdStatusフィールドが「スケジュール済み」に変わった時刻を検出します。 イベントタイプ inferred | |||
| 製造オーダーのリリース | このアクティビティは、製造オーダーが承認され、製造現場での実行が許可されたことを示します。作業カードや工程カードなどの文書が発行される、重要な節目です。 | ||
| 重要な理由 これは計画から実行への正式な引き継ぎです。「スケジュール済み」から「リリース済み」までの時間は、承認の遅れや最終確認にかかる時間を示します。「リリース済み」から「開始済み」までの時間からは、製造現場の準備状況が分かります。 入手先 ProdTableの製造オーダーのステータスが「リリース済み」に変わった時点で記録します。ユーザーによる手動操作または自動処理で発生します。 記録 ProdTableのProdStatusフィールドが「リリース済み」に変わった時刻を検出します。 イベントタイプ inferred | |||
| 製造オーダーの作成 | このアクティビティは、特定の製品を指定数量生産する需要を正式に登録する、製造オーダーの作成を示します。通常、計画製造オーダーを確定した時点で記録され、システムに一意のIDを持つ正式なレコードが作成されます。 | ||
| 重要な理由 これは生産プロセスの主な開始イベントです。作成から後続の手順までにかかる時間を分析すると、計画全体のリードタイムと効率を測定できます。 入手先 このイベントは、ProdTableに記録された製造オーダーの作成タイムスタンプから推定します。初期ステータスは通常「作成済み」です。 記録 ProdStatusが「作成済み」のProdTableの新規レコードについて、作成タイムスタンプを取得します。 イベントタイプ inferred | |||
| 製造オーダーの終了 | これは最後のアクティビティで、製造オーダーの財務上の締め処理を示します。すべてのコストが計算・転記され、オーダーに対する追加の取引はできなくなります。 | ||
| 重要な理由 物理面と財務面の両方で、オーダーが実際に完了したことを示します。「完了報告済み」から「終了済み」までの遅れは、原価計算や財務上の締め処理に問題があることを示す場合があります。 入手先 「ProdTable」の「ProdStatus」フィールドが「終了済み」に設定されたときに記録される、最後のステータス変更です。原価計算を実行してオーダーを終了すると発生します。 記録 ProdTableのProdStatusフィールドが「終了済み」に変わった時刻を検出します。 イベントタイプ inferred | |||
| 作業工程の完了 | このアクティビティは、生産工程における個々の製造作業または手順の完了を示します。通常、1つの製造オーダーに対して複数回発生します。 | ||
| 重要な理由 作業工程間の時間を分析すると、生産プロセス内のボトルネックを特定できます。製造現場の流れをより細かく把握できます。 入手先 各手順の完了を示す明示的なイベントで、工程カード仕訳(ProdJournalRoute)の転記から取得します。 記録 製造オーダーに関連付けられた各ProdJournalRouteレコードの転記タイムスタンプを取得します。 イベントタイプ explicit | |||
| 品質オーダーの作成 | 製造オーダーの生産物を検査するための品質オーダーが作成されたことを示します。生産品の品質保証プロセスの開始を表すイベントです。 | ||
| 重要な理由 品質プロセスを追跡することは、全体のリードタイムを把握するうえで重要です。品質検査が遅れると、製品の出荷や後続プロセスでの使用が妨げられることがあります。 入手先 元の製造オーダーを参照するレコードがInventQualityOrderTableに作成されたことを示す、明示的なイベントです。 記録 製造オーダーIDに関連付けられたInventQualityOrderTableの品質オーダーについて、作成タイムスタンプを取得します。 イベントタイプ explicit | |||
| 品質検査の合格 | 生産ロットに関連付けられた品質オーダーの検査と検証が正常に完了したことを示します。生産品が必要な品質基準を満たしていることを確認します。 | ||
| 重要な理由 品質プロセスにおける重要な節目です。品質オーダーの作成から検査合格までの時間から、品質保証チームの業務効率を把握できます。 入手先 InventQualityOrderTableレコードのステータスが「合格」に変わったことから推定します。具体的なステータス値はシステムによって異なる場合があります。 記録 関連するInventQualityOrderTableレコードのステータスが「合格」に更新された時刻を検出します。 イベントタイプ inferred | |||
| 生産用材料のピッキング | 製造オーダーに必要な原材料が倉庫からピッキングされ、使用できる状態になったことを示します。原材料のピッキング作業の完了時、またはピッキングリスト仕訳の転記時に記録されます。 | ||
| 重要な理由 このアクティビティは、生産開始の重要な関門です。スケジュール設定から材料のピッキングまでの遅れは、倉庫業務や材料の在庫状況に問題があることを示します。 入手先 通常、製造オーダーに関連付けられた倉庫管理テーブル(WHSWorkTable)または在庫仕訳(InventJournalTrans)に、明示的なイベントとして記録されます。 記録 製造オーダーに関連付けられたピッキングリスト仕訳の転記タイムスタンプを取得します。 イベントタイプ explicit | |||
| 製造オーダーのキャンセル | 完了前に製造オーダーがキャンセルされたことを示します。プロセスが正常に完了しなかった場合の終了パターンです。 | ||
| 重要な理由 キャンセルを追跡すると、需要の変化や計画ミスなど、プロセスが完了しない原因を特定できます。キャンセル率が高い場合、組織全体に関わる問題がある可能性があります。 入手先 ステータスの変更から推定する、別の終了状態です。具体的なステータスはシステムによって異なりますが、オーダーのステータスを以前の状態に戻し、キャンセル済みとして記録する場合があります。 記録 キャンセルを示すステータス変更を検出します。特定には、システムの詳細な分析が必要になる場合があります。 イベントタイプ inferred | |||
| 製造オーダーの見積もり | 製造オーダーに必要な材料消費量とコストを見積もる処理を示します。先に進む前に、財務面と材料面の要件を把握するための重要な計画手順です。 | ||
| 重要な理由 見積もりの遅れは、計画段階で大きなボトルネックになることがあります。このアクティビティを追跡すると、コストや材料の計画における非効率な点を特定できます。 入手先 ProdTableの製造オーダーのステータスが「見積もり済み」に変わった時点で記録します。ユーザーがオーダーに対して「見積もり」機能を実行すると発生します。 記録 ProdTableのProdStatusフィールドが「見積もり済み」に変わった時刻を検出します。 イベントタイプ inferred | |||
| 製造オーダーの調整 | リリース後に製造オーダーに加えられた、数量や日付の変更などの重要な変更を示します。変更前後の主要フィールドを比較して、このイベントを推定します。 | ||
| 重要な理由 調整が頻繁に発生する場合、計画が安定していない、または需要が変動している可能性があり、非効率や手戻りにつながります。この情報から、変更の頻度と影響を定量化できます。 入手先 変更ログを分析するか、オーダーのステータスが「リリース済み」になった後のProdTableレコードのスナップショットを比較し、「QtySched」や「SchedEnd」などのフィールドの変更から推定します。 記録 「リリース済み」イベントのタイムスタンプ以降にProdTableの主要フィールド(数量や日付など)に加えられた変更を特定します。 イベントタイプ calculated | |||
データ抽出ガイド
ステップ
- データ管理ワークスペースを開く:Microsoft Dynamics 365 Finance and Operationsにログインします。検索バーで「
Data management」ワークスペースを検索して開きます。 - 新しいエクスポートプロジェクトを作成する:ワークスペースで「
Export」タイルを選択し、新しいデータエクスポートプロジェクトを作成します。「ProcessMind_Production_Orders」など、内容が分かるプロジェクト名を付けます。 - エクスポートするファイル形式を選択する:プロジェクトの設定で、CSVやExcelなど、エクスポートするデータ形式を選択します。「
Entity」オプションを設定し、形式の詳細を指定します。処理速度と互換性の面から、CSVを推奨します。 - 必要なデータエンティティを追加する:生産指図に関するすべてのイベントを取得できるよう、必要なデータエンティティをプロジェクトに追加します。次の各エンティティを追加してください:「生産指図」、「Production order route transactions」、「Inventory quality orders」、「Production picking list journal lines」。クエリのセクションに記載されている関連フィールドを、各エンティティで選択してください。
- データフィルターを設定する:各エンティティで「フィルター」オプションを使い、エクスポートするデータを絞り込みます。少なくとも「Company」でフィルターし、正しい法人を選択してください。データ量を扱いやすい範囲に抑えるため、「生産指図」エンティティの「Creation date」など、主要な日付フィールドに期間フィルターを設定することを強く推奨します。たとえば、直近6か月を指定します。
- 増分エクスポートを設定する(任意):継続的に分析する場合は、増分エクスポートを設定します。ソースエンティティの変更を追跡すると、前回のエクスポート以降に追加または変更されたレコードのみを抽出でき、エクスポート時間を大幅に短縮できます。
- エクスポートジョブを実行する:プロジェクトの設定が完了したら、アクションペインで「
Export」をクリックしてエクスポートを開始します。すぐに実行するか、定期的なバッチジョブとしてスケジュールできます。 - エクスポートしたファイルをダウンロードする:エクスポートジョブが正常に完了したら、ジョブ履歴を開きます。追加した各エンティティのデータファイルが個別に含まれるZIPファイルをダウンロードします。
- データをイベントログに変換する:エクスポートしたファイルは生のテーブルデータであり、イベントログ形式にはなっていません。外部ツール(Pythonスクリプト、Excel/Power BIのPower Query、ETLツールなど)を使って、ファイル内のデータを処理し、結合する必要があります。クエリのセクションに記載された変換ロジックを適用し、各エンティティの日付フィールドとステータスフィールドをピボットして、1アクティビティにつき1行のイベントログファイルにまとめてください。
- 最終的なイベントログを整える:変換後のCSVファイルに、
ProductionOrderNumber、ActivityName、EventTime、SourceSystem、LastDataUpdateの各列と、推奨属性が含まれていることを確認します。ヘッダー行を付け、ProcessMindにアップロードできる形式にしてください。
設定
- 主なデータエンティティ:この抽出では、複数のエンティティをエクスポートし、後で結合します。主なエンティティは、「生産指図」(ProdTable)、「Production order route transactions」(ProdRouteTrans)、「Inventory quality orders」(InventQualityOrderTable)です。
- 期間フィルター:データ量を管理するため、必ず日付フィルターを設定してください。「生産指図」エンティティの「Creation date」(CREATEDDATETIME)を使い、直近3~6か月に絞り込む方法が適しています。これにより、システムに過度な負荷をかけずに、最近のプロセスを漏れなく取得できます。
- 会社フィルター:分析対象の会社または法人を指定するフィルターの設定が欠かせません。エクスポートプロジェクト内の各エンティティで「フィルター」オプションを使って設定します。
- 全件取得と増分取得:初回の抽出では全件取得が必要です。以降の更新では、エンティティの変更追跡を設定して増分エクスポートを行うと、処理速度が上がり、データ負荷を抑えられます。
- 前提条件:エクスポートを実行するユーザーには、適切なセキュリティロールが必要です。通常は「Data management administrator」または必要なデータエンティティへのアクセス権を持つロールが該当します。
クエリの例 sql
/*
This is not a runnable script but a configuration and transformation plan for the Dynamics 365 Data Management Framework.
**Step 1: Configure the Export Project**
Export the following entities with the specified fields:
1. **Entity: Production orders (ProdTable)**
* `ProductionOrderNumber` (PRODID)
* `ProductionOrderStatus` (PRODSTATUS)
* `CreationDate` (CREATEDDATETIME)
* `LastUpdateDateStatusEstimate` (LASTUPDATEDATESTATUSESTIMATE)
* `LastUpdateDateStatusScheduled` (LASTUPDATEDATESTATUSSCHEDULED)
* `ReleaseDate` (RELEASEDATETIME)
* `StartDate` (STARTEDDATETIME)
* `ReportedFinishedDate` (REPORTEDFINISHEDDATETIME)
* `LastUpdateDateStatusEnded` (LASTUPDATEDATESTATUSENDED)
* `ModifiedDateTime` (MODIFIEDDATETIME)
* `CreatedByUser` (CREATEDBY)
* `ProductionSite` (INVENTSITEID)
* `ProductNumber` (ITEMID)
* `ProductionType` (PRODTYPE)
* `Quantity` (QTYsched)
* `ActualQuantity` (QTYCALC)
* `DeliveryDate` (DLVDATE)
2. **Entity: Production order route transactions (ProdRouteTrans)**
* `ProductionOrderNumber` (PRODID)
* `OperationNumber` (OPRNUM)
* `TransactionDate` (TRANSDATE)
* `TransactionTime` (TRANSTIME)
* `CreatedDateTime` (CREATEDDATETIME)
* `CreatedByUser` (CREATEDBY)
3. **Entity: Inventory quality orders (InventQualityOrderTable)**
* `QualityOrderNumber` (INVENTQUALITYORDERID)
* `ReferenceType` (REFTYPE)
* `ReferenceNumber` (PRODID)
* `QualityOrderStatus` (STATUS)
* `CreationDate` (CREATEDDATETIME)
* `ModifiedDateTime` (MODIFIEDDATETIME)
4. **Entity: Production picking list journal lines (ProdJournalBOM)**
* `JournalId` (JOURNALID)
* `ProductionOrderNumber` (PRODID)
* `PostedDateTime` (POSTEDDATETIME)
* `CreatedByUser` (CREATEDBY)
**Step 2: Apply Transformation Logic (Post-Export)**
Use a script or ETL tool to transform the exported files into a single event log CSV. For each row in the source files, generate events as described below.
*/
-- Production Order Created
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Created' AS ActivityName,
CREATEDDATETIME AS EventTime,
PRODSTATUS AS ProductionOrderStatus,
DLVDATE AS PlannedStartDate,
-- [Logic to calculate PlannedEndDate] AS PlannedEndDate,
CREATEDBY AS UserId,
INVENTSITEID AS ProductionPlant,
ITEMID AS ProductNumber,
PRODTYPE AS ProductionType,
QTYCALC AS ActualQuantity,
-- [Your field for Production Priority] AS ProductionPriority
FROM ProdTable
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Estimated
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Estimated' AS ActivityName,
LASTUPDATEDATESTATUSESTIMATE AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSESTIMATE IS NOT NULL
UNION ALL
-- Production Order Scheduled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Scheduled' AS ActivityName,
LASTUPDATEDATESTATUSSCHEDULED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSSCHEDULED IS NOT NULL
UNION ALL
-- Materials Picked For Production (based on the first picking list journal posting)
SELECT
PRODID AS ProductionOrderNumber,
'Materials Picked For Production' AS ActivityName,
MIN(POSTEDDATETIME) AS EventTime, -- Use the earliest posting time for a given order
-- Other attributes from ProdTable...
FROM ProdJournalBOM
WHERE POSTEDDATETIME IS NOT NULL
GROUP BY PRODID
UNION ALL
-- Production Order Released
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Released' AS ActivityName,
RELEASEDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE RELEASEDATETIME IS NOT NULL
UNION ALL
-- Production Order Adjusted (inferred from modification after release)
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Adjusted' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE MODIFIEDDATETIME > RELEASEDATETIME AND PRODSTATUS NOT IN ('Ended', 'Cancelled') -- Example logic
UNION ALL
-- Production Started
SELECT
PRODID AS ProductionOrderNumber,
'Production Started' AS ActivityName,
STARTEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE STARTEDDATETIME IS NOT NULL
UNION ALL
-- Operation Completed
SELECT
PRODID AS ProductionOrderNumber,
'Operation Completed' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM ProdRouteTrans
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Reported As Finished
SELECT
PRODID AS ProductionOrderNumber,
'Production Reported As Finished' AS ActivityName,
REPORTEDFINISHEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE REPORTEDFINISHEDDATETIME IS NOT NULL
UNION ALL
-- Quality Order Generated
SELECT
PRODID AS ProductionOrderNumber,
'Quality Order Generated' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND CREATEDDATETIME IS NOT NULL
UNION ALL
-- Quality Inspection Passed
SELECT
PRODID AS ProductionOrderNumber,
'Quality Inspection Passed' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND STATUS = 'Pass' AND MODIFIEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Ended
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Ended' AS ActivityName,
LASTUPDATEDATESTATUSENDED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSENDED IS NOT NULL
UNION ALL
-- Production Order Cancelled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Cancelled' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE PRODSTATUS = 'Stopped' -- Or the equivalent 'Cancelled' status enum value in your system ステップ
- Dynamics 365でBYODを設定する:「Bring your own database」機能がDynamics 365 Finance and Operations環境で設定されていることを確認します。Azure SQL Databaseを用意し、Dynamics 365からのデータエクスポートを設定します。
- 必要なエンティティを公開する:「Data management」ワークスペースで「Data entities」を開きます。次の主要エンティティを検索し、BYODデータベースに公開します:ProdTable、ProdRouteTrans、InventPickingListJour、InventQualityOrderTable。定期エクスポート用に設定してください。
- データ同期を確認する:公開したエンティティのデータが、接続先のAzure SQL Databaseに正常かつ定期的に同期されていることを確認します。エクスポートジョブの履歴にエラーがないか確認してください。
- BYODデータベースに接続する:SQL Server Management Studio(SSMS)やAzure Data StudioなどのSQLクライアントを使い、Dynamics 365のデータが保存されているAzure SQL Databaseに接続します。
- SQLクエリを準備する:新しいクエリウィンドウを開き、この文書に記載されたSQLクエリ全体をコピーします。
- クエリのパラメーターを設定する:クエリ内のプレースホルダー変数を探します。
{StartDate}、{EndDate}、{CompanyCode}を、対象期間と分析対象の会社のDataAreaIdに置き換えます。 - クエリを実行する:変更したSQLクエリをBYODデータベースに対して実行します。実行時間は、データ量と指定した期間によって異なります。
- 結果を確認する:クエリの完了後、抽出したすべてのアクティビティについて、想定した列とデータが出力されていることを確認します。この結果セットがイベントログになります。
- イベントログをエクスポートする:クエリ結果をCSVファイルにエクスポートします。多くのSQLクライアントには、結果を直接ファイルに保存する機能があります。
- ProcessMind用に整える:エクスポートしたCSVファイルがUTF-8でエンコードされ、列見出しがProcessMindで必要な属性名(CaseId、Activity、Timestampなど)と一致していることを確認します。提示されたクエリでは、すでに正しい別名が設定されています。
設定
- 主なデータエンティティ:このクエリでは、次のエンティティがBYOD環境にエクスポートされている必要があります。
PRODTABLE:生産指図のヘッダー情報とステータスが含まれます。PRODROUTETRANS:個々の生産工程とその完了状況の詳細を示します。INVENTPICKINGLISTJOUR:生産指図に対する資材のピッキングを記録します。INVENTQUALITYORDERTABLE:生産に関連する品質検査指図を追跡します。
- 期間:クエリの処理性能を保つため、まずは3~6か月分など、期間を限定して実行することを推奨します。クエリでは、生産指図の作成日(
PRODTABLEのCREATEDDATETIME)で絞り込みます。 - 会社コードのフィルター:特定の法人または会社のデータを絞り込むには、
DATAREAIDフィールドを使います。'{CompanyCode}'のプレースホルダーを、該当するID(例:'usmf')に置き換えてください。 - 前提条件:この方法では、BYODを設定するためのDynamics 365 Finance and Operationsのシステム管理者アクセス権と、クエリ実行に必要なAzure SQL DatabaseのContributor権限が必要です。
- パフォーマンス:複数年または複数の会社にまたがる大規模なデータセットの場合は、アクセスが集中しない時間帯にクエリを実行してください。抽出期間を短く分割し、後から結果を結合する方法もあります。
クエリの例 sql
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Created' AS ActivityName,
p.CREATEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity, -- Using calculated quantity at creation
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Estimated' AS ActivityName,
p.COSTCALCDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.COSTCALCDATETIME IS NOT NULL AND p.PRODSTATUS >= 2 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Scheduled' AS ActivityName,
p.SCHEDDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.SCHEDDATE IS NOT NULL AND p.PRODSTATUS >= 3 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Materials Picked For Production' AS ActivityName,
pl.LEDGERVOUCHERPOSTEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
pl.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTPICKINGLISTJOUR pl
JOIN PRODTABLE p ON pl.INVENTREFID = p.PRODID AND pl.DATAREAID = p.DATAREAID
WHERE pl.LEDGERVOUCHERPOSTEDDATETIME IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Released' AS ActivityName,
p.RELEASEDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.RELEASEDATE IS NOT NULL AND p.PRODSTATUS >= 4 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Adjusted' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.RELEASEDATE IS NOT NULL AND p.MODIFIEDDATETIME > p.RELEASEDATE AND p.PRODSTATUS IN (4, 5) AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Started' AS ActivityName,
p.STARTEDUPDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.STARTEDUPDATETIME IS NOT NULL AND p.PRODSTATUS >= 5 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
prt.PRODID AS ProductionOrderNumber,
'Operation Completed' AS ActivityName,
prt.TRANSDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
prt.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODROUTETRANS prt
JOIN PRODTABLE p ON prt.PRODID = p.PRODID AND prt.DATAREAID = p.DATAREAID
WHERE prt.POSTINGTYPE = 8 AND prt.TRANSDATE IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Reported As Finished' AS ActivityName,
p.LASTUPDDATEPRINT AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 6 AND p.LASTUPDDATEPRINT IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Quality Order Generated' AS ActivityName,
qo.CREATEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
qo.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTQUALITYORDERTABLE qo
JOIN PRODTABLE p ON qo.INVENTREFID = p.PRODID AND qo.DATAREAID = p.DATAREAID
WHERE qo.INVENTREFTYPE = 9 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Quality Inspection Passed' AS ActivityName,
qo.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
qo.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTQUALITYORDERTABLE qo
JOIN PRODTABLE p ON qo.INVENTREFID = p.PRODID AND qo.DATAREAID = p.DATAREAID
WHERE qo.INVENTREFTYPE = 9 AND qo.STATUS = 2 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Ended' AS ActivityName,
p.LASTUPDDATEPRINT AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 7 AND p.LASTUPDDATEPRINT IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Cancelled' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 0 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'; ステップ
- Power BI Desktop、またはPower Queryを含む承認済みツールが利用できることと、必要なMicrosoft Dynamics 365 Manufacturingのデータエンティティを読み取る権限があることを確認します。環境URL、法人または会社の対象範囲、承認済みの認証方法も確認してください。
- Power BI Desktopで「データを取得」を選択し、承認済みのDynamics 365コネクタ、または組織固有のOData接続かDataverse接続を選びます。管理者が設定した[Your Dynamics 365 environment connection]と[Your credentials]を使用してください。すべての環境で特定のエンティティ、エンドポイント、メニューの場所が利用できるとは限りません。
- 生産指図ヘッダーのエンティティ、生産指図の工程またはルートのエンティティ、資材ピッキングまたはピッキングリストのエンティティ、生産計上のエンティティ、品質検査指図のエンティティ、およびステータス変更の特定に必要な承認済みの監査、履歴、変更追跡エンティティを選択します。クエリ内の各ソース参照を、環境で利用できる対応エンティティまたはクエリに置き換えてください。
- 抽出範囲を設定します。[Start date parameter]、[End date parameter]、[Your company or legal entity filter]を適用します。必要な工場、製品、指図タイプ、ステータスの生産指図に絞り込みます。作成、見積もり、スケジュール、ピッキング、リリース、調整、開始、工程完了、完成報告、品質検査、終了、キャンセルを区別するために必要なソースのタイムスタンプを保持してください。
- Power Queryで、ソース列の名前とデータ型を統一します。イベントのタイムスタンプを一貫した日時型に変換し、識別子、ステータス値、会社、工場、製品番号、ユーザー、数量、優先度を標準化します。ソースにフィールドがない場合は、値を作り出さず、nullを返してください。ケースIDには生産指図番号を使います。
- アクティビティごとにイベントテーブルを作成します。各テーブルには、ProductionOrderNumber、ActivityName、EventTime、SourceSystem、LastDataUpdate、ProductionOrderStatus、PlannedStartDate、PlannedEndDate、UserId、ProductionPlant、ProductNumber、ProductionType、ActualQuantity、ProductionPriorityを含めてください。アクティビティ名には、必須の13種類の名称のいずれかと一致する固定値を設定します。
- Production Order Adjustedは、承認済みの変更前後の履歴、監査、変更追跡ソースからのみ特定してください。数量、計画日、ステータス、工場、製品、優先度などの関連フィールドを比較します。記録された変更時刻を使って、条件に該当する変更ごとに調整イベントの行を追加してください。現在の生産指図のスナップショットだけから調整を推測しないでください。
- 13種類すべてのアクティビティテーブルをUNION ALLで結合します。生産指図番号またはイベント時刻がない行は除外しますが、正当に繰り返される工程完了、調整、品質イベントは重複排除しないでください。ProductionOrderNumberとEventTimeで並べ替え、可能な場合は決定的な第2の並べ替え条件も指定します。
- 作成したテーブルをPower BIに読み込むか、CSVまたはProcessMindが対応する別のイベントログ形式でエクスポートします。エクスポートしたファイルのヘッダーが、ProductionOrderNumber、ActivityName、EventTime、SourceSystem、LastDataUpdate、ProductionOrderStatus、PlannedStartDate、PlannedEndDate、UserId、ProductionPlant、ProductNumber、ProductionType、ActualQuantity、ProductionPriorityと完全に一致することを確認してください。
- ProcessMindにアップロードする前に、必須のアクティビティがすべてイベントログの明示的な行として記録されていること、タイムスタンプのタイムゾーンが統一されていること、ProductionOrderNumberに値があること、LastDataUpdateで抽出の更新時刻を確認できることを検証します。ProcessMindはイベントログをそのまま読み込み、不足しているイベントを補完しません。
設定
- 接続:Dynamics 365環境で承認されているPower Queryコネクタと認証方法を使用します。[Your Dynamics 365 environment connection]と[Your credentials]は、組織で承認された値に置き換えてください。
- ソースエンティティ:環境で利用できる生産指図ヘッダー、工程またはルート、資材ピッキングまたはピッキングリスト、生産計上、品質検査指図、および承認済みの監査または変更追跡エンティティを選択します。エンティティ名と利用可否は環境によって異なるため、メタデータブラウザーで確認してください。
- 期間:まず3~6か月の期間を指定します。可能な場合はソースでEventTimeを使って絞り込み、長期にわたる生産指図や過去のステータス遷移を検証する場合は期間を広げてください。
- 会社と工場のフィルター:[Your company or legal entity filter]を適用し、必要に応じて対象の生産工場も指定します。複数の法人で指図番号が重複する環境では、汎用の会社フィルターを使わないでください。
- 生産指図のフィルター:必要な生産指図タイプ、製品、工場、ステータス、指図番号の範囲で絞り込みます。プロセス分析に必要な場合は、キャンセル済みまたは終了済みの指図を除外しないでください。
- イベントの記録:工程完了、資材ピッキング、品質検査、調整のイベントが繰り返される場合も、そのまま保持してください。生産指図ごとに1行だけのログにまとめないでください。
- タイムゾーン:すべてのソースタイムスタンプを、文書化された1つのタイムゾーンに変換します。ソースにタイムスタンプまたはタイムゾーンオフセットがある場合は保持してください。
- 更新メタデータ:すべての行のLastDataUpdateに、更新または抽出のタイムスタンプを設定します。データセット全体を1回で抽出する場合は、単一の更新時刻を使えます。
- パフォーマンス:日付、会社、工場、指図のフィルターはソース側で適用します。必要な列だけを選択し、不要な結合を避け、再利用するソースクエリをステージングします。大規模なデータセットでは増分更新もご検討ください。
- 前提条件:Power BI Desktopまたは承認済みのPower Queryホスト、Dynamics 365環境へのネットワークアクセス、選択したすべてのエンティティの有効な読み取り権限、および必要に応じてDynamics 365 Manufacturing、倉庫、品質、監査、変更追跡へのアクセス権が必要です。
- 設定に依存するデータ:必要なイベントソースが有効になっていない場合は、[Configure based on your system]を使い、不足しているソースを文書化してください。現在のステータスのスナップショットを過去のイベントの代わりに使わないでください。
クエリの例 sql
let
StartDate = #datetime(2026, 1, 1, 0, 0, 0),
EndDate = #datetime(2026, 6, 30, 23, 59, 59),
CompanyFilter = "[Your company or legal entity filter]",
SourceSystemValue = "Microsoft Dynamics 365 Manufacturing",
RefreshTime = DateTimeZone.RemoveZone(DateTimeZone.UtcNow()),
ProductionOrderHeader = [Your production order header query],
ProductionOrderOperation = [Your production order operation or route query],
MaterialPicking = [Your material picking or picking list query],
ProductionPosting = [Your production posting query],
QualityOrder = [Your quality order query],
ProductionOrderHistory = [Your approved production order audit or change tracking query],
Header = Table.SelectRows(ProductionOrderHeader, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Operations = Table.SelectRows(ProductionOrderOperation, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Picking = Table.SelectRows(MaterialPicking, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Posting = Table.SelectRows(ProductionPosting, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Quality = Table.SelectRows(QualityOrder, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
History = Table.SelectRows(ProductionOrderHistory, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Created = Table.SelectRows(Header, each [EventType] = "Created" or [EventType] = "Firmed"),
Estimated = Table.SelectRows(Header, each [EventType] = "Estimated"),
Scheduled = Table.SelectRows(Operations, each [EventType] = "Scheduled"),
Picked = Table.SelectRows(Picking, each [EventType] = "Picked" or [EventType] = "Posted"),
Released = Table.SelectRows(Header, each [EventType] = "Released"),
Adjusted = Table.SelectRows(History, each [ChangedField] = "Quantity" or [ChangedField] = "PlannedStartDate" or [ChangedField] = "PlannedEndDate" or [ChangedField] = "Status" or [ChangedField] = "ProductionPlant" or [ChangedField] = "ProductNumber" or [ChangedField] = "ProductionPriority"),
Started = Table.SelectRows(Posting, each [EventType] = "Started"),
OperationCompleted = Table.SelectRows(Operations, each [EventType] = "Completed"),
ReportedFinished = Table.SelectRows(Posting, each [EventType] = "Reported as finished" or [EventType] = "Finished"),
QualityGenerated = Table.SelectRows(Quality, each [EventType] = "Generated" or [EventType] = "Created"),
QualityPassed = Table.SelectRows(Quality, each [EventType] = "Passed" or [EventType] = "Validated"),
Ended = Table.SelectRows(Header, each [EventType] = "Ended"),
Cancelled = Table.SelectRows(Header, each [EventType] = "Cancelled"),
ToEvent = (InputTable as table, Activity as text) as table =>
let
Selected = Table.SelectColumns(InputTable, {"ProductionOrderNumber", "EventTime", "ProductionOrderStatus", "PlannedStartDate", "PlannedEndDate", "UserId", "ProductionPlant", "ProductNumber", "ProductionType", "ActualQuantity", "ProductionPriority"}, MissingField.UseNull),
Named = Table.AddColumn(Selected, "ActivityName", each Activity, type text),
Source = Table.AddColumn(Named, "SourceSystem", each SourceSystemValue, type text),
Updated = Table.AddColumn(Source, "LastDataUpdate", each RefreshTime, type datetime),
Ordered = Table.ReorderColumns(Updated, {"ProductionOrderNumber", "ActivityName", "EventTime", "SourceSystem", "LastDataUpdate", "ProductionOrderStatus", "PlannedStartDate", "PlannedEndDate", "UserId", "ProductionPlant", "ProductNumber", "ProductionType", "ActualQuantity", "ProductionPriority"}),
Valid = Table.SelectRows(Ordered, each [ProductionOrderNumber] <> null and [ProductionOrderNumber] <> "" and [EventTime] <> null)
in
Valid,
EventsCreated = ToEvent(Created, "Production Order Created"),
EventsEstimated = ToEvent(Estimated, "Production Order Estimated"),
EventsScheduled = ToEvent(Scheduled, "Production Order Scheduled"),
EventsPicked = ToEvent(Picked, "Materials Picked For Production"),
EventsReleased = ToEvent(Released, "Production Order Released"),
EventsAdjusted = ToEvent(Adjusted, "Production Order Adjusted"),
EventsStarted = ToEvent(Started, "Production Started"),
EventsOperationCompleted = ToEvent(OperationCompleted, "Operation Completed"),
EventsReportedFinished = ToEvent(ReportedFinished, "Production Reported As Finished"),
EventsQualityGenerated = ToEvent(QualityGenerated, "Quality Order Generated"),
EventsQualityPassed = ToEvent(QualityPassed, "Quality Inspection Passed"),
EventsEnded = ToEvent(Ended, "Production Order Ended"),
EventsCancelled = ToEvent(Cancelled, "Production Order Cancelled"),
EventLog = Table.Combine({EventsCreated, EventsEstimated, EventsScheduled, EventsPicked, EventsReleased, EventsAdjusted, EventsStarted, EventsOperationCompleted, EventsReportedFinished, EventsQualityGenerated, EventsQualityPassed, EventsEnded, EventsCancelled}),
Typed = Table.TransformColumnTypes(EventLog, {{"ProductionOrderNumber", type text}, {"ActivityName", type text}, {"EventTime", type datetime}, {"SourceSystem", type text}, {"LastDataUpdate", type datetime}, {"ProductionOrderStatus", type text}, {"PlannedStartDate", type datetime}, {"PlannedEndDate", type datetime}, {"UserId", type text}, {"ProductionPlant", type text}, {"ProductNumber", type text}, {"ProductionType", type text}, {"ActualQuantity", type number}, {"ProductionPriority", type text}}),
Sorted = Table.Sort(Typed, {{"ProductionOrderNumber", Order.Ascending}, {"EventTime", Order.Ascending}, {"ActivityName", Order.Ascending}})
in
Sorted 準備はできましたか?
このテンプレートには、生産計画データの抽出と分析を始めるために必要な情報がそろっています。今日から業務の効率化に取り組みましょう。
生産計画を効率化し、生産性を高める
ボトルネックを特定し、生産サイクル時間を30%以上短縮しましょう。
クレジットカードは不要です。数分で設定できます。