貴社の資産保守データテンプレート
貴社の資産保守データテンプレート
- 収集推奨属性
- 追跡すべき重要な保全**アクティビティ**
- SAP PM向け技術抽出ガイド
設備保全属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 Activity | 発生した特定の`タスク`または`ステータス`変更です。 | ||
| 説明 メンテナンスプロセスで実行されたステップを表します。例えば、「メンテナンスオーダー作成」、「品目出庫転記」、「注文作業確認」などです。これらは通常、ステータス変更の場合はステータス管理テーブル(JEST)から、確認の場合はトランザクションテーブル(AFRU)、品目移動の場合はMKPFから派生します。この属性はプロセスマップのノードを決定します。 その重要性 これはプロセスの「何を」定義するものであり、プロセスフローとバリアントを発見するために不可欠です。 取得元 JEST(ステータス)、AFRU(確認)、QMEL(通知)から導出 例 保全作業指示書登録済み注文リリース済み技術完了済み | |||
| イベントのタイムスタンプ EventTimestamp | アクティビティが発生した正確な日時。 | ||
| 説明 イベントが発生した特定の瞬間を記録します。ステータス変更の場合、これはシステムステータスの更新時間から取得され、操作の場合は確認時間です。正確なタイムスタンプは、サイクルタイム、リードタイムの計算、および「計画」や「実行」などのプロセスステップ間のボトルネックの特定に不可欠です。 その重要性 イベントを正しく順序付けし、すべての期間ベースのKPIを計算するために必要です。 取得元 JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) 例 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| ソースシステム SourceSystem | データの発信元システム。 | ||
| 説明 特定のSAPクライアントまたはインスタンス(例:'SAP_PM_PROD')を識別します。複数のERPシステムがあるランドスケープでは、この属性は、同じIDを共有しながらも異なる法人またはシステム環境に属するレコードを区別するのに役立ちます。 その重要性 マルチシステム環境におけるデータの一意性と系統性を確保します。 取得元 システム設定 / 抽出ログ 例 SAP_ECC_P01SAP_S4H_100 | |||
| 保全作業指示書 MaintenanceWorkOrder | メンテナンス作業指示の一意の識別子。 | ||
| 説明 メンテナンス作業指示は、SAPプラントメンテナンスにおける中心的な文書(テーブルAUFK、フィールドAUFNR)です。これは、メンテナンス要件(通知)と実行リソース、資材、コストをリンクします。プロセスマイニング分析では、これがケースIDとして機能し、作成から技術的およびビジネス的完了までのメンテナンス作業のエンドツーエンドのライフサイクルを再構築できます。 その重要性 すべてのアクティビティ、コスト、タイムスタンプを結合する一意のキーであり、プロセスフローの可視化を可能にします。 取得元 SAPテーブル AUFK、フィールド AUFNR 例 00004001234540012345000040098765 | |||
| 最終データ更新 LastDataUpdate | 最新のデータ抽出のタイムスタンプ。 | ||
| 説明 プロセスマイニング****データモデル内でデータが最後に更新された時期を示します。これにより、アナリストはインサイトがどれくらい最新であるかを理解し、リアルタイムのバックログまたはSLA遵守率を監視するダッシュボードのデータ鮮度を検証するのに役立ちます。 その重要性 データガバナンスとダッシュボードへの信頼構築に不可欠です。 取得元 ETLタイムスタンプ 例 2023-11-01T12:00:00Z | |||
| システムステータス SystemStatus | 注文の現在の技術ステータス(例:REL、TECO) | ||
| 説明 現在のオーダーに適用されているアクティブなシステムステータス(JESTより)を連結した文字列またはリストです。一般的な値には、CRTD(登録済み)、REL(リリース済み)、TECO(技術的完了)、CLSD(クローズ済み)が含まれます。これは「バックログおよび進行中作業モニター」で未完了ケースと完了済みケースをフィルタリングするのに役立ちます。 その重要性 注文のライフサイクル段階を示す主要な指標。 取得元 SAP汎用モジュール STATUS_TEXT_EDIT またはテーブル JEST 例 REL CNFTECOCRTD MACM | |||
| 主作業**センター** MainWorkCenter | 注文の実行に割り当てられた主要な作業センターまたはクルー。 | ||
| 説明 主作業区(VAPLZ)は、実際の作業を実行する技術者または機械のグループを表します。この属性は「チーム」にマッピングされ、クルーあたりの「平均修復時間」などの実行効率を分析するために不可欠です。内部労働力と外部請負業者を区別するのに役立ちます。 その重要性 リソースレベルのパフォーマンス分析を可能にします。 取得元 SAPテーブル AFKO、フィールド VAPLZ(または構成に応じたAUFK-VAPLZ) 例 MECH_01ELEC_TEAMEXT_CONT | |||
| 作成ユーザー CreatedByUser | 注文を作成した担当者のユーザー名。 | ||
| 説明 作業指示書の開始を担当するユーザー(ERNAM)を識別します。これは汎用モデルの「ユーザー」にマッピングされます。手動作成と自動作成の分析を可能にし、「保全作業指示書登録」アクティビティの監査に役立ちます。 その重要性 ユーザー行動分析と監査を可能にします。 取得元 SAPテーブル AUFK、フィールド ERNAM 例 JSMITHBSERVICEDDAVIS | |||
| 保全プラント MaintenancePlant | メンテナンスを担当するロジスティクスプラント。 | ||
| 説明 プラント(WERKS)は、ロジスティクスにおける主要な組織単位です。物理的な施設ごとにデータを分離します。この属性は、異なるサイト間でのパフォーマンスベンチマーキングに不可欠であり、ダッシュボードでの高レベルの組織フィルターをサポートするために「事業単位」にマッピングされます。 その重要性 施設のベンチマーキングにおける主要な組織フィルターです。 取得元 SAPテーブル AUFK、フィールド WERKS 例 100020003000 | |||
| 保全作業指示書**タイプ** MaintenanceOrderType | 作業指示書を分類します(例:予防保全、是正保全)。 | ||
| 説明 SAP PMの注文タイプ(AUART)は、メンテナンス作業の性質を区別します。一般的なタイプにはPM01(是正)、PM02(予防)、PM03(改修)があります。この属性は「緊急作業指示影響モニター」およびプロセスバリアントのセグメンテーションに不可欠です。なぜなら、予防ワークフローは事後的なワークフローと大きく異なるためです。 その重要性 計画作業と非計画作業の間で分析をセグメント化するための基本です。 取得元 SAPテーブル AUFK、フィールド AUART 例 PM01PM02PM03 | |||
| 保全優先度 MaintenancePriority | 作業指示に割り当てられた緊急度レベル。 | ||
| 説明 保全タスクの優先度(PRIOK)を示します(例:「1-非常に高い」、「2-高い」、「3-中程度」)。このフィールドは「緊急作業指示書比率」KPIの直接的な入力となります。優先度別にフローを分析することで、高優先度のオーダーが定常作業と比較してシステム内で本当に迅速に処理されているかを確認できます。 その重要性 SLA****分析および緊急作業識別の主要な推進要因です。 取得元 SAPテーブル AFKO、フィールド PRIOK(またはビュー経由でAUFK) 例 1-Emergency2-High3-Medium4-Low | |||
| 機能場所 FunctionalLocation | 資産が設置されている階層的な場所。 | ||
| 説明 メンテナンス作業が実行される技術構造内の場所(TPLNR)を表します。移動する設備とは異なり、機能ロケーションは静的です。この属性は、「技術検査サイクルタイム」ダッシュボードをサポートし、プラント内の異なるエリア(例:ボイラー室対梱包ライン)間でのパフォーマンス比較を可能にします。 その重要性 保全パフォーマンスの空間的・階層的分析を可能にします。 取得元 SAPテーブル IFLOT、フィールド TPLNR(またはAUFK-TPLNR経由) 例 PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| 目標完了日 TargetFinishDate | メンテナンス作業の予定完了日。 | ||
| 説明 この日付(通常は基本完了日 - GLTRP)は、作業指示の期限を表します。これは、実際の完了タイムスタンプと比較され、「SLA遵守率」KPIを計算するために使用されます。作業指示が期限内か遅延しているかを判断するための基準となります。 その重要性 全ての納期遵守率(OTD)計算の参照点。 取得元 SAPテーブル AFKO、フィールド GLTRP 例 2023-12-012023-12-15 | |||
| 計画担当グループ ResponsiblePlannerGroup | 注文の処理を担当する計画担当者のグループ。 | ||
| 説明 計画担当グループ(INGRP)は、メンテナンス作業の計画を担当する特定のチームまたは部門を識別します。これは「部署」にマッピングされ、「リソース利用率とスケジューリング」ダッシュボードにとって、準備フェーズでどの計画チームがボトルネックになっているかを特定するために不可欠です。 その重要性 計画プロセスを所有する管理チームを識別します。 取得元 SAPテーブル AUFK、フィールド INGRP 例 M01ELEMEC | |||
| 設備番号 EquipmentNumber | 保全対象の特定の物理資産を識別するためのものです。 | ||
| 説明 設備番号(EQUNR)は、個々の機械または資産オブジェクトを識別します。このフィールドのデータを集計することで、アナリストは「資産メンテナンスコストとスループット」ダッシュボードを計算し、頻繁で高額な修理が必要な「問題のある設備」を特定できます。これにより、信頼性中心の保全分析が可能になります。 その重要性 プロセス****パフォーマンスを特定の物理資産に結びつけます。 取得元 SAPテーブル AUFK、フィールド EQUNR 例 10004567PUMP-001HVAC-202 | |||
| 通知番号 NotificationNumber | この注文のトリガーとなったメンテナンス通知。 | ||
| 説明 通知番号(QMNUM)は、作業指示を最初の依頼(通知)にリンクします。このリンクは、「メンテナンス依頼受付」から完了までの総リードタイムを計算するために必要です。これがなければ、分析はメンテナンスライフサイクルの初期検出および報告フェーズを見落とします。 その重要性 実行フェーズを要求/検出フェーズに結びつけます。 取得元 SAPテーブル AUFK、フィールド QMNUM 例 1000050010000501 | |||
| アクティビティ所要時間 ActivityDuration | 特定のアクティビティを完了するのにかかった時間。 | ||
| 説明 特定のステップの期間。特に工数が記録される「作業確認済み」アクティビティに役立ちます。これは汎用モデルの「ProcessingTime」にマッピングされ、効率性と労働力の活用度を計算するために使用されます。 その重要性 タスクに費やされた実際の工数を測定します。 取得元 SAPテーブル AFRU、フィールド ISDD/ISDZ 対 IEDD/IEDZ 例 2.5時間45 minutes | |||
| 手戻り IsRework | 作業指示書に手戻り**アクティビティ**が含まれていたかどうかを示す**フラグ**です。 | ||
| 説明 プロセスループが発生したかどうかを識別する計算済みのブール値で、具体的には「保全タスク実行済み」アクティビティが複数回発生した場合、またはステータスが「技術的完了」から「処理中」に戻った場合に真となります。「保全手戻り率」KPIをサポートし、品質問題の特定に役立ちます。 その重要性 品質管理分析を直接サポートします。 取得元 プロセスフローから計算 例 truefalse | |||
| 緊急作業**フラグ** IsEmergencyWork | 作業指示書が緊急であるかどうかを示す**フラグ**です。 | ||
| 説明 保全優先度に基づいて計算されるブール型の属性です。優先度が「1」(または設定における緊急の特定のコード)の場合、このフラグは真となります。これにより、ダッシュボード層で複雑なロジックを用いることなく、「緊急作業指示書比率」KPIのフィルタリングと構築が簡素化されます。 その重要性 重要な事後保全分析のためのフィルタリングを簡素化します。 取得元 保全優先度から計算 例 truefalse | |||
| 総実績コスト TotalActualCost | 作業指示に計上された総実コスト。 | ||
| 説明 労務費、資材費、サービス費(PMCOテーブルより)を合算した費用です。この属性は「設備保全コストとスループット」ダッシュボードをサポートし、管理者が保全アクティビティの財務的影響を把握できるようにします。資産の修理と交換の費用対効果を判断する上で不可欠です。 その重要性 運用プロセスデータに財務的な側面を提供します。 取得元 SAPテーブル PMCO(値タイプ04の合計 - 実績) 例 150.002500.500.00 | |||
| 計画工数 PlannedLaborHours | 注文の見積もり工数。 | ||
| 説明 注文作業からの総計画作業(ARBEI)。これを実際のアクティビティ期間と比較することで、「計画および見積もりパフォーマンス」ダッシュボードにおいて、メンテナンス計画の精度を評価するのに役立ちます。 その重要性 計画精度分析の基本メトリックです。 取得元 SAPテーブル AFKO(作業計画合計) 例 4.08.512.0 | |||
設備保全アクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| `商品出荷`登録済み | 作業指示に対するスペアパーツまたは資材の物理的な消費を記録します。これは、注文にリンクされた資材伝票ヘッダーから取得されます。 | ||
| その重要性 部品が利用可能で、ピッキングされたことを確認し、部品の利用可能性待ち時間分析に直接影響を与えます。 取得元 テーブル MSEG/MKPF、移動タイプ 261(注文に対する品目出庫) 取得 トランザクションMIGO/MB1A実行時にログ記録済み イベントタイプ explicit | |||
| 作業指示書**オペレーション**確認済み | 技術者が特定の作業に費やした実際の時間を記録したものです。これは、資産に対する実際の実行作業を捕捉します。 | ||
| その重要性 このアクティビティは、平均修復時間および工数計算の主要なデータソースです。 取得元 テーブル AFRU(注文確認) 取得 トランザクションIW41実行時にログ記録済み イベントタイプ explicit | |||
| 保全作業指示書**リリース**済み | 計画が完了し、**オーダー**が実行のために**リリース**されたことを示します。システム**ステータスログ**におけるRELへの**ステータス**変更を監視することで捕捉されます。 | ||
| その重要性 このマイルストーンは、計画フェーズと実行フェーズを区別し、計画および見積もりリードタイムを測定するために重要です。 取得元 テーブル JCDS(ステータス変更伝票)、ステータス I0002(REL) 取得 JCDSでステータスがRELに更新されたときにログ記録済み イベントタイプ explicit | |||
| 保全作業指示書登録済み | システムにおける保全作業指示書**オブジェクト**の生成を示します。**オーダー****マスターデータテーブル**の作成**タイムスタンプ**から明示的に捕捉されます。 | ||
| その重要性 これはケースの中心的なアンカーイベントであり、依頼から計画、実行への移行を示します。 取得元 テーブル AUFK、フィールド ERDAT(日付)および ERFZEIT(時間) 取得 トランザクションIW31実行時にログ記録済み イベントタイプ explicit | |||
| 技術完了設定済み | 保全作業が物理的および技術的に完了したことを示します。TECO(技術的完了)への**ステータス**変更を通じて捕捉されます。 | ||
| その重要性 運用分析にとって最も重要な終点であり、資産が復元され、メンテナンスが完了したことを示します。 取得元 テーブル JCDS、ステータス I0045(TECO) 取得 JCDSでステータスがTECOに更新されたときにログ記録済み イベントタイプ explicit | |||
| 業務完了設定済み | 作業指示書の最終的な管理上の**クローズ**を示し、それ以上の費用計上を防止します。CLSD(クローズ済み)への**ステータス**変更を通じて捕捉されます。 | ||
| その重要性 注文ライフサイクルの絶対的な終点を示し、データ精度と記録コンプライアンスにとって極めて重要です。 取得元 テーブル JCDS、ステータス I0046(CLSD) 取得 JCDSでステータスがCLSDに更新されたときにログ記録済み イベントタイプ explicit | |||
| 作業指示書コスト決済済み | **オーダー**に集計されたコストが**統制オブジェクト**(例:**コストセンター**)に転送されたことを示します。**統制文書**から捕捉されます。 | ||
| その重要性 財務上のクローズの側面を追跡し、財務精算期間KPIをサポートします。 取得元 テーブル COBK(COオブジェクト:伝票ヘッダー)、注文にリンク 取得 決済トランザクションKO88実行時にログ記録済み イベントタイプ explicit | |||
| 作業指示書スケジュール済み | **オペレーション**の能力または日付への具体的な**スケジューリング**を示します。**オペレーション**への**ディスパッチ****ステータス**の割り当てから推測されます。 | ||
| その重要性 リソース配分の効率を測定し、「リソース利用率およびスケジューリングダッシュボード」をサポートします。 取得元 テーブル JCDS(ステータス変更伝票)、操作(ObjType OV)用、ステータス I0009(DSPT) 取得 ステータスフィールドを前後で比較 イベントタイプ inferred | |||
| 保全優先度変更済み | 作業指示書の優先度レベルの**更新**(例:緊急への**エスカレーション**)を**ログ**記録します。**オーダー****マスターデータ**に関連する変更**ドキュメント**から導出されます。 | ||
| その重要性 優先順位の変更を追跡することで、プロセス逸脱が説明され、事後的なエスカレーションを特定することで「緊急作業指示影響モニター」をサポートします。 取得元 オブジェクトクラス AUFTRAG のテーブル CDPOS/CDHDR、フィールド PRIOK 取得 変更ドキュメント(CDPOS)にログ記録済み イベントタイプ explicit | |||
| 保全通知登録済み | メンテナンス通知の初回作成を記録します。これは作業指示のトリガーとなることが多く、QMELテーブルの作成タイムスタンプから取得され、このアクティビティは上流の依頼と実行指示を結びつけます。 | ||
| その重要性 このアクティビティは、エンドツーエンドのメンテナンスプロセスの開始を確立し、故障検出から注文生成までの反応時間を計算できるようにします。 取得元 テーブル QMEL、フィールド ERDAT(作成日)および MZEIT(時間)。QMEL-AUFNR を介して注文にリンク。 取得 QMELテーブルにレコード作成時にログ記録済み イベントタイプ explicit | |||
| 技術完了取消し | 技術完了ステータスの取り消しを記録し、注文が再開されたことを示します。これにより、プロセスモデルに手戻りループが作成されます。 | ||
| その重要性 メンテナンス手戻り率KPIの主要な指標であり、時期尚早なクローズや品質問題を示します。 取得元 テーブル JCDS、ステータス I0045(TECO)が非アクティブに変更 取得 TECOステータスが無効化されたときにログ記録済み イベントタイプ explicit | |||
| 測定値記録済み | **カウンター**読み取り値や状態評価などの測定**ドキュメント**の**エントリ**を**ログ**記録します。しばしば技術点検**イベント**として機能します。 | ||
| その重要性 状態基準保全と技術点検サイクルタイムの追跡に不可欠です。 取得元 テーブル IMRG(計測伝票)、設備または機能ロケーションにリンク 取得 測定ドキュメント作成時にログ記録済み イベントタイプ explicit | |||
| 資材**コンポーネント**追加済み | 作業指示部品リストへのスペアパーツまたは資材の追加を記録します。これは予約明細の作成時に取得されます。 | ||
| その重要性 必要な部品の調達サイクルの開始を識別し、「スペアパーツ調達リードタイム****ダッシュボード」をサポートします。 取得元 テーブル RESB、フィールド BDTER(所要日付)または作成タイムスタンプ 取得 RESBに明細項目が追加されたときにログ記録済み イベントタイプ explicit | |||
| 購買依頼書作成済み | 外部調達またはサービス要求が生成されたことを示します。これにより、内部のメンテナンス注文が外部サプライチェーンに接続されます。 | ||
| その重要性 外部ベンダーまたは非在庫品調達によって発生する遅延を分析する上で極めて重要です。 取得元 テーブル EBAN、勘定割り当てを介して AUFK-AUFNR にリンク 取得 EBANレコード作成時にログ記録済み イベントタイプ explicit | |||
抽出ガイド
ステップ
データソースインターフェースの特定: SAP S/4HANA SQLインターフェースへのアクセス方法を決定します。これは通常、SAP HANA Studio、EclipseのABAP Development Tools(ADT)、またはHANAデータベースが分析レイヤーに公開されている場合はDBaaS接続文字列を介して行われます。
CDSビューの可用性の確認: 標準のCore Data Services(CDS)ビューがS/4HANAシステムでアクティブであることを確認します。必要な主要ビューは、I_MaintenanceOrder、I_MaintenanceOrderOperation、I_MaintenanceNotification、I_MaintOrderConfirmation、およびI_MeasurementDocumentです。また、標準CDSビューが現在の状態のみを表示することが多いため、完全なイベント履歴を再構築するには、システムステータス履歴テーブルJCDSおよび変更ドキュメントテーブル(CDHDR/CDPOS)へのアクセスも必要です。
SQL環境の準備: SQLエディタを開きます。ユーザーが上記にリストされているアーティファクトのDDL SQLビュー(通常はスキーマSAPABAP1または類似)に対するSELECT権限を持っていることを確認します。
抽出クエリの実行: 提供されたSQLスクリプトをエディタにコピーします。プレースホルダー
[Your Client Number]を特定のSAPクライアントID(例:100)に置き換えます。特定の日付範囲でフィルタリングする場合は、WHERE句のEventTimestampフィルタを更新します。データ変換: クエリは、タイムスタンプのキャストやステータスコードを読み取り可能なテキストへのマッピングなど、ほとんどの変換を処理します。ただし、ターゲットシステムが必要とする場合は、エクスポート中に
EventTimestamp列がISO 8601(YYYY-MM-DDTHH:MM:SS)形式に設定されていることを確認してください。結果のエクスポート: クエリを実行し、結果をCSVまたはParquetファイルにエクスポートします。ユーザー名や説明内の特殊文字を処理するために、エンコーディングがUTF-8に設定されていることを確認してください。
列マッピングの検証: エクスポートのサンプルを開き、
MaintenanceWorkOrder、Activity、EventTimestampの列が完全に埋まっていることを確認します。Activity列に、要件に記載されている特定の文字列(例:Maintenance Order Created、Goods Issue Posted)が含まれていることを確認します。ProcessMindへのアップロード: 検証済みのフラットファイルをProcessMindにインポートします。
Activity列をアクティビティIDフィールドに、MaintenanceWorkOrderをケースIDフィールドに、EventTimestampをタイムスタンプフィールドにマッピングします。
設定
- クライアントフィルタ: SAPシステムはマルチクライアントです。重複データやクライアント間のデータ漏洩を防ぐため、常に
MANDTまたはClient(例:'100')でフィルタリングしてください。 - 日付範囲: 保全作業指示書の
CreationDateを過去6~12ヶ月間に絞り込むことを推奨します。日付フィルタなしでJCDS(ステータス)やCDPOS(変更履歴)の全履歴をクエリすると、パフォーマンスタイムアウトを引き起こす可能性があります。 - 言語キー: クエリはデフォルトで英語('E')に設定されています。組織がテキスト記述に別の主要言語を使用している場合は、言語フィルタを調整してください。
- システムアクセス: ABAP Core Data Servicesスキーマまたは基盤となるHANAテーブルへのアクセスが必要です。純粋なCDSビューはスナップショットベースであることが多いため、履歴ステータス分析には生テーブルのJCDSおよびCDHDRへのアクセスが不可欠です。
- オーダータイプ: クエリはすべてのオーダータイプを抽出します。特定の保全シナリオのみを分析したい場合は、
MaintenanceOrderType(例:PM01、PM02のみ)でフィルタリングすることを推奨します。
a クエリ例 sql
/* Activity 1: Maintenance Notification Created */
SELECT
CAST(N.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(N.CreationDate, ' '), N.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
N.MaintenanceOrderType,
N.MaintenancePriority,
N.Equipment AS EquipmentNumber,
N.FunctionalLocation,
N.MaintenancePlant,
N.MaintenancePlannerGroup AS ResponsiblePlannerGroup,
N.MainWorkCenter,
N.MaintenanceNotification AS NotificationNumber,
CAST(NULL AS DATE) AS TargetFinishDate,
N.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceNotification N
JOIN I_MaintenanceOrder O ON N.MaintenanceOrder = O.MaintenanceOrder
WHERE N.MaintenanceOrder IS NOT NULL AND N.MaintenanceOrder <> ''
UNION ALL
/* Activity 2: Maintenance Order Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Created' AS Activity,
O.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrder O
UNION ALL
/* Activity 3: Maintenance Priority Changed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Priority Changed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(H.UDATE, ' '), H.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
H.USERNAME AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM CDHDR H
JOIN CDPOS P ON H.OBJECTCLAS = P.OBJECTCLAS AND H.OBJECTID = P.OBJECTID AND H.CHANGENR = P.CHANGENR
JOIN I_MaintenanceOrder O ON O.MaintenanceOrder = H.OBJECTID
WHERE H.OBJECTCLAS = 'ORDER'
AND P.TABNAME = 'AFKO'
AND P.FNAME = 'PRIOK'
UNION ALL
/* Activity 4: Maintenance Order Released */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Released' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0002' /* REL Status */
AND J.INACT = ' '
UNION ALL
/* Activity 5: Material Component Added */
SELECT
CAST(C.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Material Component Added' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(C.CreationDate, ' '), COALESCE(C.CreationTime, '000000')), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrderComponent C
JOIN I_MaintenanceOrder O ON C.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 6: Purchase Requisition Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Purchase Requisition Created' AS Activity,
PR.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
PR.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_PurchasingDocumentItem PR
JOIN I_MaintenanceOrder O ON PR.ServiceMaintenanceOrder = O.MaintenanceOrder
WHERE PR.PurchasingDocumentCategory = 'B' /* Requisition */
UNION ALL
/* Activity 7: Goods Issue Posted */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Goods Issue Posted' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(MD.CreationDate, ' '), MD.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
MD.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaterialDocumentItem MD
JOIN I_MaintenanceOrder O ON MD.MaintenanceOrder = O.MaintenanceOrder
WHERE MD.GoodsMovementType = '261'
UNION ALL
/* Activity 8: Work Order Scheduled (Operation Dispatched) */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Work Order Scheduled' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrderOperation OP ON J.OBJNR = OP.MaintenanceOrderOperationInternalID
JOIN I_MaintenanceOrder O ON OP.MaintenanceOrder = O.MaintenanceOrder
WHERE J.STAT = 'I0019' /* DSP Dispatched Status */
AND J.INACT = ' '
UNION ALL
/* Activity 9: Order Operation Confirmed */
SELECT
CAST(CNF.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Operation Confirmed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(CNF.CreationDate, ' '), CNF.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
CNF.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintOrderConfirmation CNF
JOIN I_MaintenanceOrder O ON CNF.MaintenanceOrder = O.MaintenanceOrder
WHERE CNF.IsReversed = ' '
UNION ALL
/* Activity 10: Measurement Reading Recorded */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Measurement Reading Recorded' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(M.CreationDate, ' '), M.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
M.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MeasurementDocument M
JOIN I_MaintenanceOrder O ON M.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 11: Technical Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = ' '
UNION ALL
/* Activity 12: Technical Completion Reversed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Reversed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = 'X' /* Inactive indicates it was removed/reversed */
AND J.CHIND = 'U' /* Update indicator */
UNION ALL
/* Activity 13: Order Cost Settled */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Cost Settled' AS Activity,
JE.CreationDateTime AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
JE.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_ActualPlanJrnlEntryItem JE
JOIN I_MaintenanceOrder O ON JE.OrderID = O.MaintenanceOrder
WHERE JE.BusinessTransactionType = 'KOAO' /* Settlement */
UNION ALL
/* Activity 14: Business Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Business Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0046' /* CLSD Status */
AND J.INACT = ' ' ステップ
データソースインターフェースの特定: SAP S/4HANA SQLインターフェースへのアクセス方法を決定します。これは通常、SAP HANA Studio、EclipseのABAP Development Tools(ADT)、またはHANAデータベースが分析レイヤーに公開されている場合はDBaaS接続文字列を介して行われます。
CDSビューの可用性の確認: 標準のCore Data Services(CDS)ビューがS/4HANAシステムでアクティブであることを確認します。必要な主要ビューは、I_MaintenanceOrder、I_MaintenanceOrderOperation、I_MaintenanceNotification、I_MaintOrderConfirmation、およびI_MeasurementDocumentです。また、標準CDSビューが現在の状態のみを表示することが多いため、完全なイベント履歴を再構築するには、システムステータス履歴テーブルJCDSおよび変更ドキュメントテーブル(CDHDR/CDPOS)へのアクセスも必要です。
SQL環境の準備: SQLエディタを開きます。ユーザーが上記にリストされているアーティファクトのDDL SQLビュー(通常はスキーマSAPABAP1または類似)に対するSELECT権限を持っていることを確認します。
抽出クエリの実行: 提供されたSQLスクリプトをエディタにコピーします。プレースホルダー
[Your Client Number]を特定のSAPクライアントID(例:100)に置き換えます。特定の日付範囲でフィルタリングする場合は、WHERE句のEventTimestampフィルタを更新します。データ変換: クエリは、タイムスタンプのキャストやステータスコードを読み取り可能なテキストへのマッピングなど、ほとんどの変換を処理します。ただし、ターゲットシステムが必要とする場合は、エクスポート中に
EventTimestamp列がISO 8601(YYYY-MM-DDTHH:MM:SS)形式に設定されていることを確認してください。結果のエクスポート: クエリを実行し、結果をCSVまたはParquetファイルにエクスポートします。ユーザー名や説明内の特殊文字を処理するために、エンコーディングがUTF-8に設定されていることを確認してください。
列マッピングの検証: エクスポートのサンプルを開き、
MaintenanceWorkOrder、Activity、EventTimestampの列が完全に埋まっていることを確認します。Activity列に、要件に記載されている特定の文字列(例:Maintenance Order Created、Goods Issue Posted)が含まれていることを確認します。ProcessMindへのアップロード: 検証済みのフラットファイルをProcessMindにインポートします。
Activity列をアクティビティIDフィールドに、MaintenanceWorkOrderをケースIDフィールドに、EventTimestampをタイムスタンプフィールドにマッピングします。
設定
- クライアントフィルタ: SAPシステムはマルチクライアントです。重複データやクライアント間のデータ漏洩を防ぐため、常に
MANDTまたはClient(例:'100')でフィルタリングしてください。 - 日付範囲: 保全作業指示書の
CreationDateを過去6~12ヶ月間に絞り込むことを推奨します。日付フィルタなしでJCDS(ステータス)やCDPOS(変更履歴)の全履歴をクエリすると、パフォーマンスタイムアウトを引き起こす可能性があります。 - 言語キー: クエリはデフォルトで英語('E')に設定されています。組織がテキスト記述に別の主要言語を使用している場合は、言語フィルタを調整してください。
- システムアクセス: ABAP Core Data Servicesスキーマまたは基盤となるHANAテーブルへのアクセスが必要です。純粋なCDSビューはスナップショットベースであることが多いため、履歴ステータス分析には生テーブルのJCDSおよびCDHDRへのアクセスが不可欠です。
- オーダータイプ: クエリはすべてのオーダータイプを抽出します。特定の保全シナリオのみを分析したい場合は、
MaintenanceOrderType(例:PM01、PM02のみ)でフィルタリングすることを推奨します。
a クエリ例 sql
/* Activity 1: Maintenance Notification Created */
SELECT
CAST(N.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(N.CreationDate, ' '), N.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
N.MaintenanceOrderType,
N.MaintenancePriority,
N.Equipment AS EquipmentNumber,
N.FunctionalLocation,
N.MaintenancePlant,
N.MaintenancePlannerGroup AS ResponsiblePlannerGroup,
N.MainWorkCenter,
N.MaintenanceNotification AS NotificationNumber,
CAST(NULL AS DATE) AS TargetFinishDate,
N.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceNotification N
JOIN I_MaintenanceOrder O ON N.MaintenanceOrder = O.MaintenanceOrder
WHERE N.MaintenanceOrder IS NOT NULL AND N.MaintenanceOrder <> ''
UNION ALL
/* Activity 2: Maintenance Order Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Created' AS Activity,
O.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrder O
UNION ALL
/* Activity 3: Maintenance Priority Changed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Priority Changed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(H.UDATE, ' '), H.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
H.USERNAME AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM CDHDR H
JOIN CDPOS P ON H.OBJECTCLAS = P.OBJECTCLAS AND H.OBJECTID = P.OBJECTID AND H.CHANGENR = P.CHANGENR
JOIN I_MaintenanceOrder O ON O.MaintenanceOrder = H.OBJECTID
WHERE H.OBJECTCLAS = 'ORDER'
AND P.TABNAME = 'AFKO'
AND P.FNAME = 'PRIOK'
UNION ALL
/* Activity 4: Maintenance Order Released */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Released' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0002' /* REL Status */
AND J.INACT = ' '
UNION ALL
/* Activity 5: Material Component Added */
SELECT
CAST(C.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Material Component Added' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(C.CreationDate, ' '), COALESCE(C.CreationTime, '000000')), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrderComponent C
JOIN I_MaintenanceOrder O ON C.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 6: Purchase Requisition Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Purchase Requisition Created' AS Activity,
PR.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
PR.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_PurchasingDocumentItem PR
JOIN I_MaintenanceOrder O ON PR.ServiceMaintenanceOrder = O.MaintenanceOrder
WHERE PR.PurchasingDocumentCategory = 'B' /* Requisition */
UNION ALL
/* Activity 7: Goods Issue Posted */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Goods Issue Posted' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(MD.CreationDate, ' '), MD.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
MD.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaterialDocumentItem MD
JOIN I_MaintenanceOrder O ON MD.MaintenanceOrder = O.MaintenanceOrder
WHERE MD.GoodsMovementType = '261'
UNION ALL
/* Activity 8: Work Order Scheduled (Operation Dispatched) */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Work Order Scheduled' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrderOperation OP ON J.OBJNR = OP.MaintenanceOrderOperationInternalID
JOIN I_MaintenanceOrder O ON OP.MaintenanceOrder = O.MaintenanceOrder
WHERE J.STAT = 'I0019' /* DSP Dispatched Status */
AND J.INACT = ' '
UNION ALL
/* Activity 9: Order Operation Confirmed */
SELECT
CAST(CNF.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Operation Confirmed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(CNF.CreationDate, ' '), CNF.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
CNF.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintOrderConfirmation CNF
JOIN I_MaintenanceOrder O ON CNF.MaintenanceOrder = O.MaintenanceOrder
WHERE CNF.IsReversed = ' '
UNION ALL
/* Activity 10: Measurement Reading Recorded */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Measurement Reading Recorded' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(M.CreationDate, ' '), M.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
M.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MeasurementDocument M
JOIN I_MaintenanceOrder O ON M.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 11: Technical Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = ' '
UNION ALL
/* Activity 12: Technical Completion Reversed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Reversed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = 'X' /* Inactive indicates it was removed/reversed */
AND J.CHIND = 'U' /* Update indicator */
UNION ALL
/* Activity 13: Order Cost Settled */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Cost Settled' AS Activity,
JE.CreationDateTime AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
JE.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_ActualPlanJrnlEntryItem JE
JOIN I_MaintenanceOrder O ON JE.OrderID = O.MaintenanceOrder
WHERE JE.BusinessTransactionType = 'KOAO' /* Settlement */
UNION ALL
/* Activity 14: Business Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Business Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0046' /* CLSD Status */
AND J.INACT = ' '