您的资产维护数据模板
您的资产维护数据模板
- 建议收集的属性
- 需跟踪的关键维护活动
- SAP PM 技术抽取指南
资产维护属性
| 名称 | 描述 | ||
|---|---|---|---|
| 事件timestamp EventTimestamp | 活动发生的准确日期和时间。 | ||
| 描述 记录事件发生的具体时刻。对于状态变更,这源自系统状态更新时间;对于具体操作,则是确认时间。准确的时间戳对于计算周期时间、交付周期以及识别“计划”与“执行”等流程步骤间的瓶颈至关重要。 为何重要 用于正确排序事件并计算所有基于时长的 KPI。 获取方式 JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) 示例 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| 最后数据更新 LastDataUpdate | 最近一次数据抽取的时间戳。 | ||
| 描述 指示流程挖掘数据模型中数据的最后刷新时间。这使分析师能够了解洞察的实时性,并有助于验证用于监控实时积压或 SLA 达成情况的仪表板的数据新鲜度。 为何重要 对于数据治理和建立仪表板信任度至关重要。 获取方式 ETL Timestamp 示例 2023-11-01T12:00:00Z | |||
| 活动名称 Activity | 发生的特定任务或状态更改。 | ||
| 描述 代表维护流程中执行的步骤,例如“维护工单已创建”、“发料过账”或“工单操作已确认”。这些通常源自状态管理表(JEST,用于状态变更)或事务表(AFRU 用于确认,MKPF 用于物料移动)。此属性决定了流程图中的节点。 为何重要 这定义了流程中发生了“什么”,对于发现流程图和流程变体至关重要。 获取方式 源自 JEST(状态)、AFRU(确认)、QMEL(通知) 示例 维护单已创建订单已下发技术完成 | |||
| 源系统 SourceSystem | 数据来源的系统。 | ||
| 描述 标识特定的 SAP 客户端或实例(例如 'SAP_PM_PROD')。在拥有多个 ERP 系统的环境架构中,该属性有助于区分可能共享相同 ID 但属于不同法律实体或系统环境的记录。 为何重要 确保多系统环境下的数据唯一性和血缘关系。 获取方式 系统配置 / 抽取日志 示例 SAP_ECC_P01SAP_S4H_100 | |||
| 维修工单 MaintenanceWorkOrder | 维护工单的唯一标识符。 | ||
| 描述 维护工单是 SAP Plant Maintenance 中的核心凭证(表 AUFK,字段 AUFNR)。它将维护需求(通知单)与执行资源、物料及成本关联起来。在流程挖掘分析中,它作为 Case ID(案例 ID),用于重建维护任务从创建到技术完工及业务结案的端到端生命周期。 为何重要 它是将所有活动、成本和 timestamp 绑定在一起的唯一键,从而实现流程流的可视化。 获取方式 SAP 表 AUFK,字段 AUFNR 示例 00004001234540012345000040098765 | |||
| 主工作中心 MainWorkCenter | 分配执行工单的主要工作中心或班组。 | ||
| 描述 主工作中心 (VAPLZ) 代表执行实际工作的技术团队或机器组。此属性映射为“团队”,对于分析执行效率(如每个班组的“平均修复时间”)至关重要。它还有助于区分内部劳动力与外部承包商。 为何重要 支持资源层级的绩效分析。 获取方式 SAP 表 AFKO,字段 VAPLZ(或取决于配置的 AUFK-VAPLZ) 示例 MECH_01ELEC_TEAMEXT_CONT | |||
| 创建用户 CreatedByUser | 创建工单的人员用户名。 | ||
| 描述 标识负责发起维修工单的用户 (ERNAM)。这在通用模型中映射为 'User'。它支持对手动与自动创建进行分析,并有助于审计“维修工单已创建”活动。 为何重要 支持用户行为分析和审计。 获取方式 SAP 表 AUFK,字段 ERNAM 示例 JSMITHBSERVICEDDAVIS | |||
| 功能位置 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 | |||
| 系统状态 SystemStatus | 工单当前的业务/技术状态(例如 REL、TECO)。 | ||
| 描述 当前应用于工单的活动系统状态(来自 JEST)的拼接字符串或列表。常见值包括 CRTD(已创建)、REL(已释放)、TECO(技术完工)和 CLSD(已关闭)。这有助于在“待办事项和在制品监控器”中筛选开启与关闭的案例。 为何重要 工单生命周期阶段的主要指标。 获取方式 SAP 函数模块 STATUS_TEXT_EDIT 或表 JEST 示例 已释放/已确认TECOCRTD MACM | |||
| 维修工单类型 MaintenanceOrderType | 对维修工单进行分类(例如:预防性、纠正性)。 | ||
| 描述 SAP PM 中的工单类型 (AUART) 用于区分维护工作的性质。常见类型包括 PM01(纠正性)、PM02(预防性)和 PM03(翻新)。此属性对于“紧急工单影响监控”以及流程变体切分至关重要,因为预防性工作流与反应性工作流差异巨大。 为何重要 对计划内和计划外工作进行细分分析的基础。 获取方式 SAP 表 AUFK,字段 AUART 示例 PM01PM02PM03 | |||
| 维护优先级 MaintenancePriority | 分配给工单的紧急程度。 | ||
| 描述 指示维护任务的优先级 (PRIOK),例如“1-非常高”、“2-高”或“3-中”。该字段是“紧急工单比例” KPI 的直接输入。按优先级分析流程有助于识别与常规工作相比,高优先级工单是否在系统中得到了真正的加急处理。 为何重要 SLA 分析和紧急工作识别的关键驱动因素。 获取方式 SAP 表 AFKO,字段 PRIOK(或通过视图 AUFK) 示例 1-紧急2-高3-中4-低 | |||
| 维护工厂 MaintenancePlant | 负责该维护任务的物流工厂。 | ||
| 描述 工厂 (WERKS) 是物流中的主要组织单位。它按物理设施分隔数据。此属性对于不同站点间的绩效对标分析至关重要,映射为“业务单元”,以支持仪表板中的高级别组织筛选。 为何重要 用于设施对标分析的主要组织筛选器。 获取方式 SAP 表 AUFK,字段 WERKS 示例 100020003000 | |||
| 计划小组 ResponsiblePlannerGroup | 负责处理该工单的计划员组。 | ||
| 描述 计划员组 (INGRP) 识别负责计划维护工作的特定团队或部门。这映射为“部门”,对于“资源利用与排程”仪表板至关重要,可识别哪些计划团队是准备阶段的瓶颈。 为何重要 识别负责计划流程的行政团队。 获取方式 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 | |||
| 是否紧急工作 IsEmergencyWork | 指示维修工单是否为紧急工单的标记。 | ||
| 描述 根据维护优先级计算的布尔属性。如果优先级为 '1'(或配置中特定的紧急代码),则此标记为 true。这简化了过滤过程,并允许在仪表板层直接构建“紧急工单比例” KPI,无需复杂的计算逻辑。 为何重要 简化了关键反应性维护分析的筛选流程。 获取方式 根据 MaintenancePriority 计算 示例 truefalse | |||
| 是否返工 IsRework | 指示工单是否涉及返工活动的标记。 | ||
| 描述 一个计算出的布尔值,用于识别是否发生了流程循环,特别是如果“维护任务已执行”活动发生了多次,或者状态从“技术完工”回退到“处理中”。这支持“维护返工率” KPI,并有助于识别质量问题。 为何重要 直接支持质量控制分析。 获取方式 根据流程流计算 示例 truefalse | |||
| 活动时长 ActivityDuration | 完成该特定活动所花费的时间。 | ||
| 描述 特定步骤的持续时间,特别适用于记录工时的“工序确认”活动。这在通用模型中映射为“ProcessingTime”,用于计算效率和劳动力利用率。 为何重要 衡量任务中实际投入的工时。 获取方式 SAP 表 AFRU,字段 ISDD/ISDZ 对比 IEDD/IEDZ 示例 2.5 小时45分钟 | |||
| 计划人工工时 PlannedLaborHours | 工单的预计工时。 | ||
| 描述 来自工单工序的总计划工作量 (ARBEI)。通过将其与实际活动时长对比,可在“计划与估算绩效”仪表板中评估维护计划的准确性。 为何重要 计划准确性分析的基础指标。 获取方式 SAP 表 AFKO(工序计划工作总量) 示例 4.08.512.0 | |||
资产维护活动
| 活动 | 描述 | ||
|---|---|---|---|
| 业务完工设定 | 标记维修工单的最终行政关闭,防止进一步的成本过账。通过向 CLSD(已关闭)的状态变更来捕获。 | ||
| 为何重要 代表工单生命周期的最终结束,对数据准确性和记录合规性至关重要。 获取方式 表 JCDS,状态 I0046 (CLSD)。 捕获 在 JCDS 中状态更新为 CLSD 时记录 事件类型 explicit | |||
| 发货出库已过账 | 记录针对工单的备件或物料的实际消耗。从与工单关联的物料凭证抬头中抓取。 | ||
| 为何重要 确认零件可用并已拣选,直接影响“零件可用性等待时间”分析。 获取方式 表 MSEG/MKPF,移动类型 261(工单发料)。 捕获 在执行事务 MIGO/MB1A 时记录 事件类型 explicit | |||
| 工单工序已确认 | 代表技术人员在特定操作上花费的实际时间记录。这捕捉了资产上的实际执行工作。 | ||
| 为何重要 此活动是平均修复时间(MTTR)和劳动力成本计算的主要数据源。 获取方式 表 AFRU(工单确认)。 捕获 在执行事务 IW41 时记录 事件类型 explicit | |||
| 技术完工已设置 | 标记维护工作在物理和技术上已完成。通过向 TECO(技术完工)的状态变更来捕获。 | ||
| 为何重要 运营分析中最关键的终点,标志着资产已修复且维护工作已完成。 获取方式 表 JCDS,状态 I0045 (TECO)。 捕获 在 JCDS 中状态更新为 TECO 时记录 事件类型 explicit | |||
| 维修工单已释放 | 指示计划已完成,工单已释放以供执行。通过监控系统状态日志中向 REL 的状态变更来捕获。 | ||
| 为何重要 这一里程碑将计划阶段与执行阶段分开,对于衡量计划与估算交付周期至关重要。 获取方式 表 JCDS(状态变更凭证),状态 I0002 (REL)。 捕获 在 JCDS 中状态更新为 REL 时记录 事件类型 explicit | |||
| 维护单已创建 | 标记系统中维修工单对象的生成。直接从工单主数据表的创建 timestamp 捕获。 | ||
| 为何重要 这是案例的核心锚点事件,标志着从请求阶段转向计划与执行阶段。 获取方式 表 AUFK,字段 ERDAT(日期)和 ERFZEIT(时间)。 捕获 在执行事务 IW31 时记录 事件类型 explicit | |||
| 工单已排程 | 指示工序在产能或日期上的具体排程。根据工序的 Dispatch 状态分配情况进行推断。 | ||
| 为何重要 衡量资源分配效率,并支持“资源利用与调度”仪表板。 获取方式 操作(对象类型 OV)的表 JCDS(状态变更凭证),状态 I0009 (DSPT)。 捕获 比较状态字段的前后变化 事件类型 inferred | |||
| 工单成本已结算 | 指示工单上归集的成本已转移到控制对象(如成本中心)。从控制文档中捕获。 | ||
| 为何重要 追踪财务结案情况,并支持“财务结算时长”KPI。 获取方式 表 COBK(CO 对象:凭证抬头),链接至工单。 捕获 在执行结算事务 KO88 时记录 事件类型 explicit | |||
| 已创建请购单 | 表示已生成外部采购或服务请求。这将内部维护工单与外部供应链连接起来。 | ||
| 为何重要 对于分析由外部供应商或非库存物料采购导致的延迟至关重要。 获取方式 表 EBAN,通过账户分配链接至 AUFK-AUFNR。 捕获 在 EBAN 记录创建时记录 事件类型 explicit | |||
| 技术完工已撤销 | 记录技术完工状态的撤销,表明工单已重新开启。这在流程模型中会形成一个返工回路。 | ||
| 为何重要 维护返工率 KPI 的主要指标,用于突出显示提前关闭或质量问题。 获取方式 表 JCDS,状态 I0045 (TECO) 变更为不活动。 捕获 在 TECO 状态去激活时记录 事件类型 explicit | |||
| 测量读数已记录 | 记录测量文档的输入,例如计数器读数或状况评估。通常作为“技术检查”事件。 | ||
| 为何重要 对于状态维护 (CBM) 和跟踪技术检查周期时间至关重要。 获取方式 表 IMRG(测量凭证),链接至设备或功能位置。 捕获 在测量文档创建时记录 事件类型 explicit | |||
| 物料组件已添加 | 记录向工单组件列表中添加备件或物料的操作。从预留行项目的创建中抓取。 | ||
| 为何重要 标识所需零件采购周期的开始,支持“备件采购提前期”仪表板。 获取方式 表 RESB,字段 BDTER(需求日期)或创建时间戳。 捕获 在行项目添加到 RESB 时记录 事件类型 explicit | |||
| 维修通知已创建 | 记录维护通知单的初始创建,这通常是工单的触发源。该活动从 QMEL 表的创建时间戳中抓取,将上游请求与执行工单关联起来。 | ||
| 为何重要 此活动确立了端到端维护流程的起点,从而可以计算从发现故障到生成工单之间的响应时间。 获取方式 表 QMEL,字段 ERDAT(创建日期)和 MZEIT(时间)。通过 QMEL-AUFNR 链接至工单。 捕获 在 QMEL 表中创建记录时记录 事件类型 explicit | |||
| 维护优先级已更改 | 记录维修工单优先级的更新(例如升级为紧急)。源自与工单主数据关联的修改文档。 | ||
| 为何重要 追踪优先级变更可以解释流程偏离的原因,并通过识别反应性升级来支持“紧急工单影响监控”。 获取方式 对象类别 AUFTRAG 的表 CDPOS/CDHDR,字段 PRIOK。 捕获 记录在修改文档 (CDPOS) 中 事件类型 explicit | |||
提取指南
步骤
确定数据源接口:确定您访问 SAP S/4HANA SQL 接口的方式。通常可以通过 SAP HANA Studio、Eclipse 中的 ABAP 开发工具 (ADT) 进行,或者如果 HANA 数据库已对分析层开放,则使用 DBaaS 连接字符串。
验证 CDS 视图可用性:确保 S/4HANA 系统中的标准核心数据服务 (CDS) 视图处于激活状态。所需的主要视图包括 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 筛选条件。
数据转换:查询脚本已处理了大部分转换逻辑,如 timestamp 类型转换和状态码到可读文本的映射。但是,如果您的目标系统有特定要求,请确保导出的 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')进行过滤,以避免重复数据或跨客户端数据泄漏。 - 日期范围:建议筛选过去 6 到 12 个月内的维修工单
CreationDate。在没有日期筛选的情况下查询JCDS(状态)或CDPOS(修改文档)的完整历史记录可能会导致系统性能超时。 - 语言键值:查询默认使用英语('E')。如果贵司使用其他主要语言进行文本描述,请调整语言筛选器。
- 系统访问:需要访问 ABAP Core Data Services 模式或底层的 HANA 表。访问原始表 JCDS 和 CDHDR 对于历史状态分析至关重要,因为纯 CDS 视图通常只反映快照状态。
- 工单类型:该查询会提取所有工单类型。如果您只想分析特定的维护场景,可以对
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 开发工具 (ADT) 进行,或者如果 HANA 数据库已对分析层开放,则使用 DBaaS 连接字符串。
验证 CDS 视图可用性:确保 S/4HANA 系统中的标准核心数据服务 (CDS) 视图处于激活状态。所需的主要视图包括 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 筛选条件。
数据转换:查询脚本已处理了大部分转换逻辑,如 timestamp 类型转换和状态码到可读文本的映射。但是,如果您的目标系统有特定要求,请确保导出的 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')进行过滤,以避免重复数据或跨客户端数据泄漏。 - 日期范围:建议筛选过去 6 到 12 个月内的维修工单
CreationDate。在没有日期筛选的情况下查询JCDS(状态)或CDPOS(修改文档)的完整历史记录可能会导致系统性能超时。 - 语言键值:查询默认使用英语('E')。如果贵司使用其他主要语言进行文本描述,请调整语言筛选器。
- 系统访问:需要访问 ABAP Core Data Services 模式或底层的 HANA 表。访问原始表 JCDS 和 CDHDR 对于历史状态分析至关重要,因为纯 CDS 视图通常只反映快照状态。
- 工单类型:该查询会提取所有工单类型。如果您只想分析特定的维护场景,可以对
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 = ' '