設備保全データテンプレート
設備保全データテンプレート
- 収集を推奨する属性
- 追跡すべき重要な保全アクティビティ
- 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(クローズ済み)があります。「Backlog and Work In Progress Monitor」でオープンケースとクローズ済みケースを絞り込む際に役立ちます。 重要な理由 作業指図のライフサイクル段階を示す主要な指標。 入手先 SAPファンクションモジュールSTATUS_TEXT_EDITまたはテーブルJEST 例 REL CNFTECOCRTD MACM | |||
| プランナーグループ ResponsiblePlannerGroup | オーダーの処理を担当するプランナーのグループです。 | ||
| 説明 Planner Group(INGRP)は、保全作業の計画を担当するチームまたは部門を特定します。これは「Department」にマッピングされ、準備段階でどの計画チームがボトルネックになっているかを特定する「Resource Utilization and Scheduling」ダッシュボードに欠かせません。 重要な理由 計画プロセスを担当する管理チームを特定します。 入手先 SAPテーブルAUFK、フィールドINGRP 例 M01ELEMEC | |||
| 主要作業区 MainWorkCenter | オーダーの実行を担当する主要な作業区または作業班です。 | ||
| 説明 Main Work Center(VAPLZ)は、実作業を行う技術者または機械のグループを表します。この属性は「Team」にマッピングされ、作業班ごとの「Mean Time to Repair」など、実行効率の分析に役立ちます。また、社内要員と外部委託先を区別できます。 重要な理由 リソース単位でパフォーマンスを分析できます。 入手先 SAPテーブルAFKO、フィールドVAPLZ(設定によってはAUFK-VAPLZ) 例 MECH_01ELEC_TEAMEXT_CONT | |||
| 作成者 CreatedByUser | 作業指図を作成した担当者のユーザー名。 | ||
| 説明 作業指図の開始を担当したユーザー(ERNAM)を特定します。汎用モデルでは「User」に対応付けられます。手動作成と自動作成を分析でき、「Maintenance Order Created」アクティビティの監査にも役立ちます。 重要な理由 ユーザー行動の分析と監査を可能にします。 入手先 SAPテーブルAUFK、フィールドERNAM 例 JSMITHBSERVICEDDAVIS | |||
| 保全プラント MaintenancePlant | 保全を担当する物流プラントです。 | ||
| 説明 Plant(WERKS)は、物流における主要な組織単位です。物理的な拠点ごとにデータを分けます。この属性は、異なる拠点間でパフォーマンスを比較する際に欠かせません。また、「BusinessUnit」にマッピングされ、ダッシュボードで組織レベルのフィルタリングを行うために使われます。 重要な理由 拠点のベンチマークに使う主要な組織フィルターです。 入手先 SAPテーブルAUFK、フィールドWERKS 例 100020003000 | |||
| 保全作業指図タイプ MaintenanceOrderType | 作業指図を分類します(例:予防、是正)。 | ||
| 説明 SAP PMの作業指図タイプ(AUART)は、保全作業の性質を区別します。一般的なタイプにはPM01(是正)、PM02(予防)、PM03(再生)があります。この属性は「緊急作業指図影響モニター」に欠かせず、プロセスバリアントの分類にも使われます。予防保全のワークフローは、反応的な保全のワークフローと大きく異なるためです。 重要な理由 計画作業と計画外作業を分けて分析するための基本項目です。 入手先 SAPテーブルAUFK、項目AUART 例 PM01PM02PM03 | |||
| 保全優先度 MaintenancePriority | 作業指図に割り当てられた緊急度です。 | ||
| 説明 「1:非常に高い」「2:高い」「3:中」など、保全作業の優先度(PRIOK)を示します。この項目は「緊急作業指図比率」KPIに直接入力されます。優先度別にフローを分析することで、高優先度の作業指図が通常作業と比べて実際に迅速に処理されているかを確認できます。 重要な理由 SLA分析と緊急作業の特定を左右する主要な要因です。 入手先 SAPテーブルAFKO、項目PRIOK(またはビュー経由のAUFK) 例 1-緊急2-高3-中4-低 | |||
| 機能場所 FunctionalLocation | 設備が設置されている階層上の場所です。 | ||
| 説明 保全作業が実施される技術構造上の場所を表します(TPLNR)。移動するEquipmentとは異なり、Functional Locationは固定されています。この属性により、プラント内の異なるエリア(例:ボイラー室と包装ライン)間でパフォーマンスを比較でき、「Technical Inspection Cycle Times」ダッシュボードを支援します。 重要な理由 保全パフォーマンスを空間および階層の観点から分析できます。 入手先 SAPテーブルIFLOT、フィールドTPLNR(またはAUFK-TPLNR経由) 例 PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| 目標完了日 TargetFinishDate | 保全作業の予定完了日です。 | ||
| 説明 この日付(通常はBasic Finish Date - GLTRP)は、作業指図の期限を表します。実際の完了時刻と比較し、「SLA Adherence Rate」KPIを計算します。作業指図が期限内か遅延しているかを判断する基準です。 重要な理由 On-Time Delivery(OTD)計算の基準となる日付です。 入手先 SAPテーブルAFKO、フィールドGLTRP 例 2023-12-012023-12-15 | |||
| 設備番号 EquipmentNumber | 保全対象となる特定の物理設備を識別する番号です。 | ||
| 説明 設備番号(EQUNR)は、個々の機械または設備オブジェクトを識別します。この項目でデータを集計すると、「設備保全コストとスループット」ダッシュボードを作成し、頻繁に高コストの修理が必要な問題設備を特定できます。信頼性中心保全の分析にも役立ちます。 重要な理由 プロセスのパフォーマンスを特定の物理設備に結び付けます。 入手先 SAPテーブルAUFK、項目EQUNR 例 10004567PUMP-001HVAC-202 | |||
| 通知番号 NotificationNumber | このオーダーの起点となった保全通知です。 | ||
| 説明 Notification Number(QMNUM)は、Work Orderを最初の依頼(Notification)に関連付けます。この関連付けにより、「Maintenance Request Received」から完了までの全リードタイムを計算できます。これがない場合、保全ライフサイクルの初期段階である異常の検知と報告が分析から抜け落ちます。 重要な理由 実行段階を依頼・検知段階に関連付けます。 入手先 SAPテーブルAUFK、フィールドQMNUM 例 1000050010000501 | |||
| 実績総原価 TotalActualCost | 作業指図に計上された実際の総コストです。 | ||
| 説明 労務費、資材費、サービス費を集計したコストです(テーブルPMCO)。この属性は「Asset Maintenance Cost and Throughput」ダッシュボードを支援し、保全活動が財務に与える影響を把握できます。資産を修理するか交換するか、その費用対効果を判断する際にも欠かせません。 重要な理由 業務プロセスデータに財務面の情報を加えます。 入手先 SAPテーブルPMCO(値タイプ04 - Actualの合計) 例 150.002500.500.00 | |||
| 手戻りかどうか IsRework | 作業指図に手戻り作業が含まれているかどうかを示すフラグ。 | ||
| 説明 プロセスループが発生したかどうかを特定する計算済みのブール型属性です。具体的には、「Maintenance Task Executed」アクティビティが複数回発生した場合、またはステータスが「Technically Completed」から「In Process」に戻った場合に該当します。「Maintenance Rework Rate」KPIを支え、品質上の問題の特定に役立ちます。 重要な理由 品質管理の分析を直接支援します。 入手先 プロセスフローから計算 例 truefalse | |||
| 緊急作業かどうか IsEmergencyWork | 作業指図が緊急作業かどうかを示すフラグ。 | ||
| 説明 保全優先度に基づいて計算されるブール型の属性です。優先度が「1」(または設定で緊急を示すコード)の場合、このフラグはtrueになります。これにより、ダッシュボード層で複雑なロジックを使わずに、緊急作業指図比率のKPIを絞り込み、作成できます。 重要な理由 重要な事後保全の分析における絞り込みを簡素化します。 入手先 MaintenancePriorityから計算 例 truefalse | |||
| 計画労働時間 PlannedLaborHours | 作業指図に対して見積もられた労働時間。 | ||
| 説明 作業指図のオペレーションにおける計画作業量(ARBEI)の合計です。実際のアクティビティ所要時間と比較することで、「Planning and Estimation Performance」ダッシュボードにおいて、保全計画の精度を評価できます。 重要な理由 計画精度を分析するための基本指標。 入手先 SAPテーブルAFKO(オペレーション計画作業量の合計) 例 4.08.512.0 | |||
資産保全アクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 作業指図作業の確認 | 技術者が特定の作業に実際に費やした時間の記録を表します。設備に対する実際の作業実行を記録します。 | ||
| 重要な理由 平均修理時間と人件費の計算における主要なデータソースです。 入手先 テーブルAFRU(作業指図確認)。 取得 トランザクションIW41の実行時に記録 イベントタイプ explicit | |||
| 保全作業指図のリリース | 計画が完了し、作業指図が実行可能な状態でリリースされたことを示します。システムステータスログで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 | |||
| 業務上の完了設定 | 作業指図の最終的な事務処理上のクローズを示し、それ以降のコスト転記を防ぎます。CLSD(クローズ)へのステータス変更によって取得します。 | ||
| 重要な理由 作業指図ライフサイクルの完全な終点を表し、データ精度と記録のコンプライアンスに欠かせません。 入手先 テーブルJCDS、ステータスI0046(CLSD)。 取得 JCDSでステータスがCLSDに更新された時点で記録 イベントタイプ explicit | |||
| 作業指図コストの決済 | 作業指図に集計されたコストが、原価センターなどの管理対象に振り替えられたことを示します。管理会計伝票から取得します。 | ||
| 重要な理由 財務上の完了状況を追跡し、財務決済期間KPIを支援します。 入手先 テーブルCOBK(COオブジェクト:伝票ヘッダー)、作業指図に関連付けます。 取得 決済トランザクションKO88の実行時に記録 イベントタイプ explicit | |||
| 作業指図のスケジュール設定 | 作業が能力または日付に割り当てられ、具体的にスケジュールされたことを示します。作業にディスパッチ済みステータスが割り当てられたことから推定します。 | ||
| 重要な理由 リソース配分の効率を測定し、リソース利用率・スケジューリングダッシュボードを支援します。 入手先 作業(ObjType OV)に対するテーブルJCDS(ステータス変更文書)、ステータスI0009(DSPT)。 取得 変更前後のステータス項目を比較 イベントタイプ inferred | |||
| 保全優先度の変更 | 作業指図の優先度レベルが更新されたことを記録します。たとえば、緊急への引き上げなどです。作業指図マスターデータに関連する変更文書から取得します。 | ||
| 重要な理由 優先度の変更を追跡することで、プロセスの逸脱を説明し、緊急作業指図影響モニターで反応的な優先度引き上げを特定できます。 入手先 オブジェクトクラスAUFTRAG、項目PRIOKに対するテーブルCDPOS/CDHDR。 取得 変更文書(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 Viewの利用可否を確認:S/4HANAシステムで標準のCore Data Services(CDS)Viewが有効になっていることを確認します。必要な主なViewは、I_MaintenanceOrder、I_MaintenanceOrderOperation、I_MaintenanceNotification、I_MaintOrderConfirmation、I_MeasurementDocumentです。また、完全なイベント履歴を再構成するには、システムステータス履歴テーブルJCDSと変更文書テーブル(CDHDR/CDPOS)へのアクセスも必要です。標準のCDS Viewでは現在の状態しか表示されない場合が多いためです。
SQL環境を準備:SQLエディターを開きます。ユーザーに、上記のアーティファクトに対応するDDL SQL View(通常は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')で絞り込んでください。 - 期間:Maintenance OrderのCreationDateを、過去6~12か月に絞り込むことを推奨します。JCDS(ステータス)やCDPOS(変更文書)の全履歴を日付フィルターなしで検索すると、パフォーマンスのタイムアウトが発生する可能性があります。
- 言語キー:クエリの既定値は英語('E')です。組織でテキスト説明に別の主要言語を使用している場合は、言語フィルターを調整してください。
- システムアクセス:ABAP Core Data Servicesスキーマまたは基盤となるHANAテーブルへのアクセスが必要です。純粋なCDS Viewはスナップショットベースであることが多いため、過去のステータス分析には生のテーブルである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 = ' ' ステップ
- 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]から抽出します。AUFK、AFVC、JESTだけでは、要求された14種類のアクティビティをすべて提供できないため、これらのソースが必要です。
- すべてのソースのタイムスタンプを1つのタイムゾーンと単一のタイムスタンプデータ型に統一します。SAPの日付・時刻項目またはデータベースのタイムスタンプ項目をEventTimestampに変換します。システムで利用できるソースのタイムスタンプ精度は保持してください。抽出期間はオーダー作成日だけでなく、EventTimestampに適用します。
- ソースで発生したすべての事象について、イベント行を1行ずつ作成します。ProcessMindがイベントを推測することを前提にしないでください。クエリで指定された正確なActivity値を設定し、MaintenanceWorkOrder、EventTimestamp、SourceSystem、LastDataUpdate、および利用可能な推奨属性を入力します。重複調査に役立つ場合は、ソース識別子も保持してください。
- 重複排除は、安定したソースキーを使って同一のソースイベントに限って行います。異なる時刻に発生した個別のステータス変更、確認、品目移動、測定値、決済文書をまとめないでください。複数のソースレコードが1つの業務イベントを表す場合は、抽出仕様書に採用したソースの優先順位を記載します。
- 14種類のActivity値がすべて明示的な行として存在し、すべての行にケース識別子とタイムスタンプがあり、タイムスタンプが要求された抽出期間内に収まっていることを検証します。同じフィルター条件でSAPレポートまたはソーステーブルの件数と比較してください。
- 結果をUTF-8のCSV、またはProcessMindがサポートする別のイベントログ形式でエクスポートします。イベントごとに1行とし、必須列を設定済みの正確な列名で含め、対応している場合はISO 8601形式のタイムスタンプを保持します。その後、ファイルをアップロードするか、ProcessMindでデータベース接続を設定します。MaintenanceWorkOrderをケース識別子、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]を抽出実行の開始時または終了時に生成したタイムスタンプに置き換え、その実行で生成されるすべての行に同じ値を使用します。
- パフォーマンス:可能な場合は結合列とフィルター列にインデックスを設定またはパーティション化し、抽出期間を制限し、必要な列だけを選択します。長期間のデータはバッチ処理し、スキーマ間の直接結合が遅い場合は中間ソース抽出をマテリアライズします。
- 前提条件:データベース接続、設定したすべてのソーステーブルへの読み取り権限、関連するPlant Maintenance、Materials Management、Controlling、測定データへのアクセス、および業務データを抽出する承認が必要です。データベースプラットフォームに関する複製やライセンス上の制約も確認してください。
a サンプルクエリ 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分でセットアップできます