設備保全データテンプレート
設備保全データテンプレート
- 収集を推奨する属性
- 追跡すべき重要な保全アクティビティ
- 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 | 保全作業指示を一意に識別するIDです。 | ||
| 説明 保全作業指示は、SAP Plant Maintenanceにおける中心的な文書です(テーブル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)は、実作業を行う技術者または機械のグループを表します。この属性はTeamにマッピングされ、作業班ごとの平均修理時間など、実行効率の分析に役立ちます。社内作業者と外部委託先の区別にも使えます。 重要な理由 リソース単位でパフォーマンスを分析できます。 入手先 SAPテーブルAFKO、フィールドVAPLZ(設定によりAUFK-VAPLZの場合もあります) 例 MECH_01ELEC_TEAMEXT_CONT | |||
| 作成者ユーザー CreatedByUser | 指図を作成した担当者のユーザー名です。 | ||
| 説明 作業指図の起票者であるユーザー(ERNAM)を特定します。汎用モデルでは「ユーザー」に対応します。手動作成と自動作成の分析や、「保全指図の作成」アクティビティの監査に役立ちます。 重要な理由 ユーザーの行動分析と監査に役立ちます。 入手先 SAPテーブルAUFK、フィールドERNAM 例 JSMITHBSERVICEDDAVIS | |||
| 保全プラント MaintenancePlant | 保全を担当する物流プラントです。 | ||
| 説明 プラント(WERKS)は、物流における主要な組織単位です。物理的な施設ごとにデータを分けます。この属性は施設間の実績比較に欠かせません。また、BusinessUnitにマッピングすることで、ダッシュボード上で組織全体を対象としたフィルタリングができます。 重要な理由 施設間の実績比較に使う主要な組織フィルターです。 入手先 SAPテーブルAUFK、フィールドWERKS 例 100020003000 | |||
| 保全優先度 MaintenancePriority | 作業指示に設定された緊急度です。 | ||
| 説明 保全作業の優先度(PRIOK)を示します。例:1-非常に高い、2-高い、3-中程度。このフィールドは、緊急作業指示率の重要業績評価指標(KPI)に直接使われます。優先度別にフローを分析すると、優先度の高い指示が通常作業より実際に迅速に処理されているかを確認できます。 重要な理由 SLA分析と緊急作業の特定に役立つ重要な指標です。 入手先 SAPテーブルAFKO、フィールドPRIOK(またはビュー経由でAUFK) 例 1-緊急2-高3-中4-低 | |||
| 保全指示タイプ MaintenanceOrderType | 作業指示を分類します(例:予防保全、是正保全)。 | ||
| 説明 SAP PMの指示タイプ(AUART)は、保全作業の種類を区別します。一般的なタイプにはPM01(是正保全)、PM02(予防保全)、PM03(再生修理)があります。この属性は、緊急作業指示の影響モニターやプロセスバリアントの分類に欠かせません。予防保全と事後対応では、ワークフローが大きく異なるためです。 重要な理由 計画作業と計画外作業を分けて分析するための基本情報です。 入手先 SAPテーブルAUFK、フィールドAUART 例 PM01PM02PM03 | |||
| 機能場所 FunctionalLocation | 設備が設置されている階層上の場所です。 | ||
| 説明 保全作業を実施する技術構造上の場所(TPLNR)を表します。移動する設備とは異なり、機能場所は固定されています。この属性を使うと、工場内の異なる区域(ボイラー室と包装ラインなど)の実績を比較でき、技術検査サイクル時間のダッシュボードに役立ちます。 重要な理由 保全実績を場所別・階層別に分析できます。 入手先 SAPテーブルIFLOT、フィールドTPLNR(またはAUFK-TPLNR経由) 例 PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| 目標完了日 TargetFinishDate | 保全作業の予定完了日です。 | ||
| 説明 この日付(通常は基本終了日GLTRP)は、作業指図の期限を示します。実際の完了日時と比較して、重要業績評価指標(KPI)の「SLA遵守率」を算出します。作業指図が期限内に完了したか、遅延したかを判定する基準となります。 重要な理由 納期遵守率(OTD)のすべての計算で基準となる日付です。 入手先 SAPテーブルAFKO、フィールドGLTRP 例 2023-12-012023-12-15 | |||
| 計画グループ ResponsiblePlannerGroup | 指示の処理を担当する計画担当者のグループです。 | ||
| 説明 計画グループ(INGRP)は、保全作業の計画を担当するチームまたは部門を特定します。Departmentにマッピングされます。準備段階でどの計画チームがボトルネックになっているかを特定するため、リソース利用・スケジュール設定のダッシュボードに欠かせません。 重要な理由 計画プロセスを担当する事務チームを特定します。 入手先 SAPテーブルAUFK、フィールドINGRP 例 M01ELEMEC | |||
| 設備番号 EquipmentNumber | 保全対象となる個々の物理的な設備を識別する番号です。 | ||
| 説明 設備番号(EQUNR)は、個々の機械または設備オブジェクトを識別します。このフィールドでデータを集計すると、設備保全コスト・処理量のダッシュボードを作成し、頻繁に高額な修理が必要となる問題設備を特定できます。信頼性重視の保全分析にも役立ちます。 重要な理由 プロセスのパフォーマンスを個々の物理的な設備に関連付けます。 入手先 SAPテーブルAUFK、フィールドEQUNR 例 10004567PUMP-001HVAC-202 | |||
| 通知番号 NotificationNumber | この指示の起点となった保全通知です。 | ||
| 説明 通知番号(QMNUM)は、作業指示を最初の依頼(通知)に関連付けます。この関連付けは、保全依頼の受領から完了までのリードタイム全体を算出するために必要です。これがないと、保全ライフサイクルの初期段階である故障の検知と報告を分析に含められません。 重要な理由 実行段階と依頼・検知段階をつなぎます。 入手先 SAPテーブルAUFK、フィールドQMNUM 例 1000050010000501 | |||
| 実際総コスト TotalActualCost | 作業指図に計上された実際コストの合計です。 | ||
| 説明 人件費、資材費、サービス費(テーブルPMCO)の集計値です。この属性は「設備保全コストと処理量」ダッシュボードで使われ、保全作業による財務面への影響を確認できます。また、設備を修理するか交換するかを判断する際の費用対効果の評価にも欠かせません。 重要な理由 業務プロセスのデータに財務面の情報を加えます。 入手先 SAPテーブルPMCO(値タイプ04「実績」の合計) 例 150.002500.500.00 | |||
| 手戻りの有無 IsRework | 指図に手戻り作業が含まれているかを示すフラグです。 | ||
| 説明 プロセスのループが発生したかを特定する真偽値です。「保全作業の実行」アクティビティが複数回発生した場合、またはステータスが「技術的完了」から「処理中」に戻った場合に該当します。「保全手戻り率」の重要業績評価指標(KPI)に役立ち、品質上の問題の特定にもつながります。 重要な理由 品質管理の分析に直接役立ちます。 入手先 プロセスフローから算出 例 truefalse | |||
| 緊急作業かどうか IsEmergencyWork | 作業指図が緊急かどうかを示すフラグです。 | ||
| 説明 保全優先度に基づいて算出する真偽値属性です。優先度が「1」(または設定で緊急を示すコード)の場合、このフラグはtrueになります。これにより、ダッシュボード側で複雑なロジックを組まずに絞り込みを行い、「緊急作業指図率」の重要業績評価指標(KPI)を作成できます。 重要な理由 重大な事後保全の分析に向けた絞り込みを簡単にします。 入手先 MaintenancePriorityから算出 例 truefalse | |||
| 計画工数 PlannedLaborHours | 指図に対して見積もられた作業時間です。 | ||
| 説明 指図の作業工程における計画作業量(ARBEI)の合計です。実際のアクティビティ所要時間と比較することで、「計画・見積もりの精度」ダッシュボードで保全計画の正確さを評価できます。 重要な理由 計画精度の分析に用いる基本指標です。 入手先 SAPテーブルAFKO(作業工程の計画作業量の合計) 例 4.08.512.0 | |||
設備保全のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 保全指示のリリース | 計画が完了し、指示が実行可能になったことを示します。システムステータスログでRELへの変更を監視して取得します。 | ||
| 重要な理由 このマイルストーンを境に計画段階から実行段階へ移ります。計画・見積もりリードタイムの測定に欠かせません。 入手先 テーブルJCDS(ステータス変更文書)、ステータスI0002(REL)。 記録 JCDSでステータスがRELに更新された時点で記録 イベントタイプ explicit | |||
| 保全指示の作成 | システム内で保全作業指示オブジェクトが作成されたことを示します。指示マスタデータテーブルの作成日時から明示的に取得します。 | ||
| 重要な理由 ケースの中心となるイベントです。依頼から計画・実行への移行を示します。 入手先 テーブルAUFKのフィールドERDAT(日付)およびERFZEIT(時刻)。 記録 トランザクションIW31の実行時に記録 イベントタイプ explicit | |||
| 出庫の転記 | 作業指示に対する予備部品や資材の実際の消費を記録します。指示に関連付けられた資材伝票ヘッダーから取得します。 | ||
| 重要な理由 部品が使用可能で、払い出されたことを確認します。部品の入手待ち時間の分析に直接関係します。 入手先 テーブルMSEG/MKPF、移動タイプ261(指示への出庫)。 記録 トランザクションMIGO/MB1Aの実行時に記録 イベントタイプ explicit | |||
| 技術的完了の設定 | 保全作業が物理的・技術的に完了したことを示します。ステータスがTECO(技術的完了)に変更された時点で取得します。 | ||
| 重要な理由 業務分析における最も重要な終了点です。設備が復旧し、保全作業が完了したことを示します。 入手先 テーブルJCDS、ステータスI0045(TECO)。 記録 JCDSでステータスがTECOに更新された時点で記録 イベントタイプ explicit | |||
| 指示作業の確認 | 特定の作業に技術者が実際に費やした時間の記録を表します。設備に対して実施した作業の実績を把握できます。 | ||
| 重要な理由 このアクティビティは、平均修理時間と人件費の算出に使う主要なデータソースです。 入手先 テーブルAFRU(指示確認)。 記録 トランザクションIW41の実行時に記録 イベントタイプ explicit | |||
| 業務完了の設定 | 作業指示の最終的な事務処理上の締めを示し、以降の原価転記を防ぎます。ステータスがCLSD(クローズ)に変更された時点で取得します。 | ||
| 重要な理由 指示のライフサイクルが完全に終了したことを示します。データ精度と記録のコンプライアンスを確認するうえで重要です。 入手先 テーブルJCDS、ステータスI0046(CLSD)。 記録 JCDSでステータスがCLSDに更新された時点で記録 イベントタイプ explicit | |||
| 作業指示のスケジュール設定 | 作業または日付がキャパシティに割り当てられ、スケジュールされたことを示します。作業にディスパッチ済みステータスが割り当てられたことから推定します。 | ||
| 重要な理由 リソース配分の効率を測定し、リソース利用・スケジュール設定のダッシュボードに役立てます。 入手先 テーブルJCDS(ステータス変更文書)の作業データ(ObjType OV)、ステータスI0009(DSPT)。 記録 変更前後のステータスフィールドを比較 イベントタイプ inferred | |||
| 保全優先度の変更 | 緊急への引き上げなど、作業指示の優先度が更新されたことを記録します。指示マスタデータに関連付けられた変更文書から取得します。 | ||
| 重要な理由 優先度の変更を追跡すると、プロセス逸脱の理由を把握できます。また、緊急作業指示の影響モニターで、緊急対応による優先度の引き上げを特定できます。 入手先 テーブルCDPOS/CDHDR、オブジェクトクラスAUFTRAG、フィールドPRIOK。 記録 変更文書(CDPOS)に記録 イベントタイプ explicit | |||
| 保全通知の作成 | 保全通知が最初に作成されたことを記録します。保全通知は、作業指示の起点となることがよくあります。QMELテーブルの作成日時から取得し、上流の依頼と実行指示を関連付けます。 | ||
| 重要な理由 このアクティビティを起点として、保全プロセス全体の開始を定義できます。故障の検知から指示の作成までの対応時間を算出する際に使います。 入手先 テーブルQMELのフィールドERDAT(作成日)およびMZEIT(時刻)。QMEL-AUFNRを介して指示に関連付けます。 記録 QMELテーブルにレコードが作成された時点で記録 イベントタイプ explicit | |||
| 技術的完了の取り消し | 技術的完了ステータスの取り消しを記録し、指示が再開されたことを示します。プロセスモデル上では手戻りのループになります。 | ||
| 重要な理由 保全手戻り率の重要業績評価指標(KPI)を測る主な指標です。早すぎる完了処理や品質上の問題を明らかにします。 入手先 テーブルJCDSでステータスI0045(TECO)が非アクティブに変更されたこと。 記録 TECOステータスが無効化された時点で記録 イベントタイプ explicit | |||
| 指示原価の決済 | 指示に集計された原価が、原価センタなどの管理対象に振り替えられたことを示します。管理会計伝票から取得します。 | ||
| 重要な理由 財務上の締め処理を追跡し、財務決済期間の重要業績評価指標(KPI)に役立てます。 入手先 テーブルCOBK(COオブジェクト:伝票ヘッダー)。指示に関連付けます。 記録 決済トランザクションKO88の実行時に記録 イベントタイプ 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ビューの利用可否を確認する:S/4HANAシステムで標準のCore Data Services(CDS)ビューが有効になっていることを確認します。主に必要となるビューは、I_MaintenanceOrder、I_MaintenanceOrderOperation、I_MaintenanceNotification、I_MaintOrderConfirmation、I_MeasurementDocumentです。また、イベント履歴全体を再構成するには、システムステータス履歴テーブルJCDSと変更文書テーブル(CDHDR/CDPOS)へのアクセスも必要です。標準のCDSビューには現在の状態しか表示されないことが多いためです。
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列をActivity IDフィールドに、MaintenanceWorkOrder列をCase IDフィールドに、EventTimestamp列をTimestampフィールドにマッピングします。
設定
- クライアントフィルター:SAPシステムは複数のクライアントを使用します。データの重複やクライアント間の漏えいを防ぐため、必ず
MANDTまたはClient(例:「100」)で絞り込みます。 - 期間:保全指図の
CreationDateを過去6~12か月に絞り込むことを推奨します。期間を指定せずにJCDS(ステータス)やCDPOS(変更文書)の全履歴を照会すると、タイムアウトが発生する可能性があります。 - 言語キー:クエリの初期設定は英語(「E」)です。組織で別の言語を主に使用している場合は、テキストの言語フィルターを変更してください。
- システムアクセス:ABAP Core Data Servicesスキーマまたは基盤となるHANAテーブルへのアクセスが必要です。CDSビューだけでは過去の状態を確認できず、スナップショットしか取得できないことが多いため、履歴ステータスの分析には生のテーブルJCDSとCDHDRへのアクセスが欠かせません。
- 指図タイプ:クエリはすべての指図タイプを抽出します。特定の保全シナリオのみを分析する場合は、
MaintenanceOrderType(例:PM01、PM02のみ)で絞り込んでください。
クエリの例 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 = ' ' ステップ
- AUFK、AFVC、JEST、QMEL、RESB、EBAN、MSEG、MKPF、AFRU、IMRG、および該当する変更文書・管理会計伝票テーブルへの直接読み取りアクセスが可能であることを確認します。SAPのデータベースでは、環境によってフィールドの有無や複製されたテーブル構造が異なるため、実際のテーブル名とフィールドのマッピングも確認してください。
- 抽出接続、認証情報、抽出開始日、抽出終了日、および会社固有のフィルターを設定します。初期検証では3~6か月の期間を使い、パフォーマンスとデータの完全性を確認してから対象期間を広げます。
- AUFKから指図ヘッダーの属性、AFVCから作業工程の属性、JESTからステータスレコードを抽出します。SAPスキーマで使われている指図番号フィールドを使って、指図関連のレコードを結合します。多くのSAP環境でJESTは現在のステータスを保持するテーブルです。過去のステータス日時を取得するには、ステータス履歴または変更文書のデータソースが必要です。JESTにステータス変更履歴がない場合は、[Your status history table]とそのタイムスタンプフィールドを設定します。
- QMELから通知の作成、RESBから構成品目の作成、EBANから購買依頼の作成、MSEGとMKPFから出庫情報、AFRUから確認、IMRGから測定値、[Your controlling document table]から管理会計の決済レコードを抽出します。優先度の変更は、[Your order change document table]と[Your change document item table]から抽出します。要求される14種類のアクティビティすべてを取得するには、AUFK、AFVC、JESTだけでは不十分なため、これらのデータソースが必要です。
- すべてのソースのタイムスタンプを、単一のタイムゾーンとタイムスタンプ型に統一します。SAPの日付・時刻フィールドまたはデータベースのタイムスタンプフィールドをEventTimestampに変換します。システムで利用できるソースの精度は維持してください。抽出期間は指図の作成日だけでなく、EventTimestampにも適用します。
- ソースで発生したイベントごとに1行作成します。ProcessMindによるイベントの推定には頼らないでください。クエリで指定されたActivityの値をそのまま設定し、MaintenanceWorkOrder、EventTimestamp、SourceSystem、LastDataUpdate、および利用可能な推奨属性を入力します。重複調査に役立つ場合は、ソースの識別子も保持します。
- 安定したソースキーを使い、同一のソースイベントだけを重複排除します。異なる時刻に発生したステータス変更、確認、在庫移動、測定値、決済伝票をまとめないでください。複数のソースレコードが1つの業務イベントを表す場合は、抽出仕様書に採用するソースの優先順位を記載します。
- 14種類すべてのアクティビティが個別の行として存在し、各行にケースIDとタイムスタンプがあり、タイムスタンプが指定した抽出期間内に収まっていることを確認します。同じフィルター条件を使ったSAPレポートまたはソーステーブルの件数と比較します。
- 結果をUTF-8のCSV、またはProcessMindが対応する別のイベントログ形式でエクスポートします。イベントごとに1行とし、設定した正確な列名で必須列を含めます。対応している場合はISO 8601形式のタイムスタンプを維持し、ファイルをアップロードするか、ProcessMindでデータベース接続を設定します。MaintenanceWorkOrderをケースID、Activityをアクティビティ列、EventTimestampをタイムスタンプ列に設定します。
設定
- ソーステーブルとマッピング:AUFKから指図ヘッダーデータ、AFVCから作業工程データ、JESTからシステムステータスデータを取得します。14種類すべてのアクティビティを作成するには、QMEL、RESB、EBAN、MSEG、MKPF、AFRU、IMRG、変更文書のデータソース、管理会計伝票のデータソースも必要です。実行前にSAPデータベースで正確なフィールド名を確認してください。
- 必須出力列:MaintenanceWorkOrder、Activity、EventTimestamp、SourceSystem、LastDataUpdateをすべてのイベント行に含めます。
- 推奨出力列:MaintenanceOrderType、MaintenancePriority、EquipmentNumber、FunctionalLocation、MaintenancePlant、ResponsiblePlannerGroup、MainWorkCenter、NotificationNumber、TargetFinishDate、CreatedByUser、SystemStatusは、取得できる場合に値を設定します。
- 期間:まずは3~6か月を対象にします。増分実行間でイベントが重複しないよう、開始境界を含み、終了境界を含まない期間を指定します。過去データを一括取得する場合は、データベースが対応する月単位などの期間に分割します。
- フィルター:レポートの対象範囲に応じて、[Company Code filter]、[Order Type filter]、[Maintenance Plant filter]、[Notification Type filter]、[Document Type filter]を設定します。通知、作業工程、構成品目、購買依頼、確認、測定、決済伝票がない指図を除外するフィルターは適用しないでください。
- ステータス履歴:JESTには通常、ステータスの割り当てが記録されますが、過去のステータス変更を取得するには[Your status history table]または変更文書が必要になる場合があります。ステータス変更日時と遷移履歴を含むデータソースを設定してください。
- 優先度の履歴:優先度の変更を取得するには、該当するオブジェクト識別子、フィールド名、変更前の値、変更後の値、変更日時を含む[Your order change document table]と[Your change document item table]が必要です。
- ソースシステムの値:[Your SAP system identifier]を、組織で使用している固定のソースシステム名に置き換えます。
- 最終データ更新日時:[Your extraction timestamp]を、抽出実行の開始時または終了時に生成したタイムスタンプに置き換えます。同じ実行で抽出したすべての行に同じ値を設定します。
- パフォーマンス:許可されている場合は結合列とフィルター列にインデックスを設定するか、パーティション分割します。抽出期間を限定し、必要な列だけを選択し、大量のデータはバッチ処理します。スキーマをまたぐ直接結合が遅い場合は、中間のソースデータを実体化します。
- 前提条件:データベース接続、設定したすべてのソーステーブルへの読み取り権限、プラント保全・在庫管理・管理会計・測定データへのアクセス、および業務データの抽出承認が必要です。データベースプラットフォームに関する複製やライセンスの制約も確認してください。
クエリの例 sql
WITH
params AS (
SELECT
CAST('[Start date and time]' AS TIMESTAMP) AS start_ts,
CAST('[End date and time]' AS TIMESTAMP) AS end_ts,
CAST('[Your SAP system identifier]' AS VARCHAR(100)) AS source_system,
CAST('[Your extraction timestamp]' AS TIMESTAMP) AS last_data_update
),
order_base AS (
SELECT
a.[Order number field] AS MaintenanceWorkOrder,
a.[Order type field] AS MaintenanceOrderType,
a.[Priority field] AS MaintenancePriority,
a.[Equipment field] AS EquipmentNumber,
a.[Functional location field] AS FunctionalLocation,
a.[Maintenance plant field] AS MaintenancePlant,
a.[Planner group field] AS ResponsiblePlannerGroup,
a.[Main work center field] AS MainWorkCenter,
a.[Notification number field] AS NotificationNumber,
a.[Target finish date field] AS TargetFinishDate,
a.[Created by field] AS CreatedByUser,
a.[System status field] AS SystemStatus,
a.[Creation date field] AS OrderCreationDate,
a.[Creation time field] AS OrderCreationTime
FROM AUFK a
WHERE a.[Order number field] IS NOT NULL
AND a.[Company code field] = '[Your company code filter]'
),
base_events AS (
SELECT
o.MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
CAST(q.[Notification creation timestamp field] AS TIMESTAMP) AS EventTimestamp,
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN QMEL q ON q.[Notification number field] = o.NotificationNumber
CROSS JOIN params p
WHERE q.[Notification creation timestamp field] >= p.start_ts
AND q.[Notification creation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Maintenance Order Created',
CAST(o.OrderCreationDate || ' ' || o.OrderCreationTime AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o CROSS JOIN params p
WHERE CAST(o.OrderCreationDate || ' ' || o.OrderCreationTime AS TIMESTAMP) >= p.start_ts
AND CAST(o.OrderCreationDate || ' ' || o.OrderCreationTime AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Maintenance Priority Changed',
CAST(c.[Change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, c.[New priority value field], o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN [Your order change document table] h ON h.[Order object identifier field] = o.MaintenanceWorkOrder
JOIN [Your change document item table] c ON c.[Change document number field] = h.[Change document number field]
CROSS JOIN params p
WHERE c.[Changed field name field] = '[Your priority field name]'
AND CAST(c.[Change timestamp field] AS TIMESTAMP) >= p.start_ts
AND CAST(c.[Change timestamp field] AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Maintenance Order Released',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, 'REL'
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Status code field] = 'REL'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Material Component Added',
CAST(r.[Reservation creation timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN RESB r ON r.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE r.[Reservation line creation timestamp field] >= p.start_ts
AND r.[Reservation line creation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Purchase Requisition Created',
CAST(e.[Purchase requisition creation timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN EBAN e ON e.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE e.[Purchase requisition creation timestamp field] >= p.start_ts
AND e.[Purchase requisition creation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Goods Issue Posted',
CAST(m.[Material document timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN MSEG m ON m.[Order number field] = o.MaintenanceWorkOrder
JOIN MKPF k ON k.[Material document number field] = m.[Material document number field]
AND k.[Material document year field] = m.[Material document year field]
CROSS JOIN params p
WHERE m.[Movement type field] IN ('201', '261')
AND k.[Material document timestamp field] >= p.start_ts
AND k.[Material document timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Work Order Scheduled',
CAST(v.[Dispatch status timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN AFVC v ON v.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE v.[Dispatch status field] = '[Your dispatch status value]'
AND v.[Dispatch status timestamp field] >= p.start_ts
AND v.[Dispatch status timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Order Operation Confirmed',
CAST(f.[Confirmation timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN AFRU f ON f.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE f.[Confirmation timestamp field] >= p.start_ts
AND f.[Confirmation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Measurement Reading Recorded',
CAST(i.[Measurement document timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN IMRG i ON i.[Equipment field] = o.EquipmentNumber
CROSS JOIN params p
WHERE i.[Measurement document timestamp field] >= p.start_ts
AND i.[Measurement document timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Technical Completion Set',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, 'TECO'
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Status code field] = 'TECO'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Technical Completion Reversed',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, s.[Resulting system status field]
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Previous status code field] = 'TECO'
AND s.[Status code field] <> 'TECO'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Order Cost Settled',
CAST(c.[Controlling document timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN [Your controlling document table] c ON c.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE c.[Controlling document timestamp field] >= p.start_ts
AND c.[Controlling document timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Business Completion Set',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, 'CLSD'
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Status code field] = 'CLSD'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
)
SELECT
e.MaintenanceWorkOrder,
e.Activity,
e.EventTimestamp,
p.source_system AS SourceSystem,
p.last_data_update AS LastDataUpdate,
e.MaintenanceOrderType,
e.MaintenancePriority,
e.EquipmentNumber,
e.FunctionalLocation,
e.MaintenancePlant,
e.ResponsiblePlannerGroup,
e.MainWorkCenter,
e.NotificationNumber,
e.TargetFinishDate,
e.CreatedByUser,
e.SystemStatus
FROM base_events e
CROSS JOIN params p
WHERE e.MaintenanceWorkOrder IS NOT NULL
AND e.EventTimestamp IS NOT NULL
AND e.EventTimestamp >= p.start_ts
AND e.EventTimestamp < p.end_ts
ORDER BY e.MaintenanceWorkOrder, e.EventTimestamp, e.Activity; 始める準備はできていますか?
これらの資料を使って、保全ワークフローのマッピングとコスト削減の機会の特定を始めましょう。このフレームワークを使えば、業務の全体像を把握するために必要なデータ構造を整えられます。
SAPの設備保全におけるボトルネックを今すぐ解消
今すぐ保全サイクルタイムを30%短縮
クレジットカード不要……5分で設定完了