您的资产维护数据模板
您的资产维护数据模板
- 维护日志的必要数据字段
- 标准流程里程碑和工单阶段
- Hexagon EAM技术提取逻辑
资产维护属性
| 名称 | 说明 | ||
|---|---|---|---|
| 最后数据更新时间 LastDataUpdate | 记录最后一次提取或刷新的时间戳。 | ||
| 说明 此属性记录数据最后一次从源系统提取的时间,帮助分析人员了解数据新鲜度,并识别报告管道中可能存在的延迟问题。 为什么重要 它有助于确认分析数据的时效性,并排查数据同步问题。 获取位置 提取时的系统时间 示例 2023-10-25T12:00:00Z2023-10-26T00:00:00Z | |||
| 时间戳 EventTimestamp | 活动发生的日期和时间。 | ||
| 说明 此属性记录事件或状态变更提交至系统的准确时刻,可用于计算活动之间的持续时间以及工单整体周期时间。 为什么重要 准确的时间戳对于分析周期时间、识别延误和计算SLA遵循率至关重要。 获取位置 Hexagon EAM表R5EVENTHISTORY,字段EVH_DATE 示例 2023-10-12T08:30:00Z2023-10-12T14:15:00Z2023-10-13T09:00:00Z | |||
| 活动 ActivityName | 已发生的具体任务或状态变更事件。 | ||
| 说明 此属性表示正在执行的流程步骤,例如“Work Order Created”或“Material Issued”。它源自工单记录的状态变更历史或具体事务事件。 为什么重要 它定义事件日志顺序,使流程顺序流重建和瓶颈分析成为可能。 获取位置 Hexagon EAM表R5EVENTHISTORY,字段EVH_STATUS(映射为描述)或审计日志 示例 工单已创建工单已排程工单已完成物料已发放 | |||
| 源系统 SourceSystem | 数据来源系统的名称。 | ||
| 说明 此属性表示数据的记录系统。在此场景中,该值固定为特定EAM系统名称,用于与潜在的旧系统数据或外部承包商系统数据区分。 为什么重要 它确保数据血缘清晰,尤其是在合并多个维护实例的数据时。 获取位置 固定值 示例 Hexagon EAMInfor EAMDatastream 7i | |||
| 维护工单 WorkOrderNumber | 维护工单的唯一标识符。 | ||
| 说明 此属性代表维护案例的唯一主键,用于跟踪工单从初始请求、规划、执行到最终财务结案的全过程。它作为核心案例标识符,用于关联活动日志、工时和物料消耗。 为什么重要 它标识维护流程的具体实例,从而支持端到端跟踪周期时间和流程变体。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_CODE 示例 WO-100234WO-100235WO-100236104592 | |||
| 优先级 PriorityCode | 分配给工单的紧急程度。 | ||
| 说明 此属性表示工单的重要性,范围从例行任务到紧急任务。它驱动资源排程,对于监控SLA遵循率和识别优先级滥用至关重要。 为什么重要 它对于Priority Escalation and Resource Audit仪表板至关重要,可确保关键任务得到正确优先处理。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_PRIORITY 示例 严重高中低 | |||
| 实际人工工时 ActualLaborHours | 计入工单的总工时。 | ||
| 说明 此属性汇总技术人员记录在工单上的时间,可用于衡量生产率、计算人工成本,并分析实际工时与预估工时的差异。 为什么重要 它是技术人员人工生产率仪表板和人工工时差异KPI的主要数据源。 获取位置 Hexagon EAM表R5BOOKEDHOURS,字段BOO_HOURS(按工单汇总) 示例 2.54.012.00.5 | |||
| 工单类型 WorkOrderType | 将工单分类为预防性、纠正性或紧急性。 | ||
| 说明 此属性用于分类维护工作的性质,分析计划性预防维护与被动紧急维修的比例,这是衡量资产健康状况和管理成熟度的重要指标。 为什么重要 它支持Preventive Maintenance Ratio Analysis仪表板,并帮助识别减少被动维修的机会。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_TYPE 示例 PPMCOREMGPRJ | |||
| 用户 UpdatedBy | 执行该活动人员的用户ID。 | ||
| 说明 此属性记录负责触发状态变更或更新人员的登录ID,可用于分析团队工作负载、识别培训需求并审计流程合规。 为什么重要 支持分析整个维护生命周期中的用户行为和资源利用情况。 获取位置 Hexagon EAM表R5EVENTHISTORY,字段EVH_USER 示例 JSMITHADAVISSYSTEMMGR_USR | |||
| 目标完成日期 TargetCompletionDate | 工单的计划截止日期。 | ||
| 说明 此属性表示预计完成维护工作的日期。将其与实际完成日期进行比较,是计算SLA达标情况和按时完成率的基础。 为什么重要 它是承包商SLA达标监控和计划准确性评估的关键数据。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_TARGET 示例 2023-11-012023-11-152023-12-01 | |||
| 资产 AssetCode | 待维护设备或设施的唯一标识符。 | ||
| 说明 此属性将工单关联到特定设备或位置,可用于分析每项资产的故障频率,并识别问题资产或需要更换的设备。 为什么重要 它是计算资产可靠性指标、了解维护工作集中位置的基础。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_OBJECT 示例 PUMP-001HVAC-204FLEET-99CONVEYOR-A | |||
| 部门 MaintenanceDepartment | 负责执行工作的部门或工作中心。 | ||
| 说明 此属性标识分配给工单的团队或维护车间,例如电气、机械或设施团队,可用于比较不同技术团队的绩效。 为什么重要 它支持Technician Labor Productivity仪表板,并帮助在不同工种之间有效分配资源。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_MRC 示例 电气车间机械维护设施车队服务 | |||
| SLA状态 SLAState | 表示工单是否满足其服务级别协议。 | ||
| 说明 此计算属性将实际完成日期与目标完成日期进行比较,并将案例归类为“在SLA内”或“已违约”,简化对承包商和内部团队绩效的报告。 为什么重要 它是SLA达标率KPI的直接数据源。 获取位置 计算方式:实际结束日期<=目标日期 示例 符合SLA已超出SLA已打开 | |||
| 创建日期 DateCreated | 工单最初生成的日期。 | ||
| 说明 此属性标记工单生命周期的起点,是计算平均计划时间和确定积压项目时长的基准。 为什么重要 它是维护计划执行速度仪表板和积压时长KPI的必要数据。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_CREATED 示例 2023-09-012023-09-15 | |||
| 实际总成本 TotalActualCost | 工单记录的财务总成本。 | ||
| 说明 此属性汇总人工、材料和服务成本,对于分析财务结算,以及了解紧急维护与预防性维护的成本影响至关重要。 为什么重要 它支持财务结算和关闭速度仪表板,以及基于成本的决策。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_ACTCOST(或类似汇总列) 示例 150.002500.5075.25 | |||
| 工单描述 WorkOrderDescription | 对维护任务的简短文字概述。 | ||
| 说明 此属性包含问题的主题或简短描述,为分析人员深入查看具体问题案例或识别非结构化文本中的模式提供背景信息。 为什么重要 它为人工审查流程数据提供必要背景。 获取位置 Hexagon EAM表R5EVENTS,字段EVT_DESC 示例 修复泵密封泄漏每月HVAC检查更换输送带 | |||
| 是否返工 IsRework | 表示工单是否涉及重复技术任务的标记。 | ||
| 说明 此计算属性用于识别流程从质量检查或完成状态返回活动工作状态的案例,帮助定位质量问题和培训缺口。 为什么重要 它驱动技术返工与质量控制仪表板,以及维护返工率KPI。 获取位置 根据活动重复次数计算 示例 truefalse | |||
| 是否预防性维护 IsPreventive | 表示工单是否属于预防性维护的标记。 | ||
| 说明 此布尔属性便于筛选和分类工单。它将主动维护与故障响应维修分开,简化预防性维护占比KPI的计算。 为什么重要 它是预防性维护占比分析仪表板的基础分类维度。 获取位置 派生自WorkOrderType 示例 truefalse | |||
| 材料申请日期 MaterialRequisitionDate | 申请备件的日期。 | ||
| 说明 此属性记录材料申请提交至库房或采购部门的时间戳。分析从该日期到“材料发放”的时长,可以评估供应链效率。 为什么重要 它是备件采购周期仪表板的必要数据。 获取位置 Hexagon EAM表R5REQUISITIONS或关联交易表 示例 2023-10-012023-10-05 | |||
| 紧急升级 EmergencyEscalationFlag | 表示工单创建后优先级是否提升为紧急的标记。 | ||
| 说明 此布尔属性用于识别创建时优先级较低、之后升级为紧急的工单。此类情况频繁出现,可能表明初始分诊不佳,或有人通过系统操作获取更快服务。 为什么重要 它支持优先级升级和资源审计仪表板,以及紧急升级率KPI。 获取位置 派生自Priority字段的审计轨迹 示例 truefalse | |||
| 质量控制已通过 QualityControlPassed | 表示QC步骤是否已记录的标记。 | ||
| 说明 此布尔属性用于检查特定质量控制活动或检查项是否标记为已完成,确保符合安全法规和内部标准。 为什么重要 它驱动质量控制合规率KPI,并支持合规与文档完整性仪表板。 获取位置 派生自Checklist表或Activity History 示例 truefalse | |||
| 资产关键性 AssetCriticality | 表示资产运营重要性的评分。 | ||
| 说明 此属性表示资产对业务运营的重要程度。它通常用于验证高优先级工单是否确实关联关键设备,从而发现潜在的流程滥用。 为什么重要 它通过关联优先级与资产价值,为优先级升级和资源审计仪表板提供支持。 获取位置 Hexagon EAM表R5OBJECTS,字段OBJ_CRITICALITY(需通过EVT_OBJECT关联) 示例 A-关键B-严重C-次要D-低 | |||
资产维护活动
| 活动 | 说明 | ||
|---|---|---|---|
| 工单已关闭 | 工单已完成财务锁定并归档,之后不能再登记成本或工时。 | ||
| 为什么重要 流程结束。对于Financial Settlement Processed分析和锁定最终成本至关重要。 获取位置 Hexagon EAM的r5statuslog。转换为“C”(Closed)或“L”(Locked/Closed)。 采集 在r5statuslog上执行事务时记录 事件类型 explicit | |||
| 工单已创建 | 在系统中首次创建维护工单记录。该事件建立案例,并记录整个维护生命周期的初始时间戳。 | ||
| 为什么重要 标志流程实例开始,并为衡量总解决时间设定基线,是计算积压工单存续时间的关键。 获取位置 Hexagon EAM的r5events表。插入带有evt_code的新记录时记录。 采集 在r5events上执行INSERT事务时记录 事件类型 explicit | |||
| 工单已完成 | 技术工作已完成,技术人员已将作业标记为完成,资产恢复运行。 | ||
| 为什么重要 这是End to End Lifecycle Duration和Mean Time to Repair的关键里程碑,并停止停机计时。 获取位置 Hexagon EAM的r5statuslog。转换为“C”(Completed)或“F”(Finished)。 采集 在r5statuslog上执行事务时记录 事件类型 explicit | |||
| 工单已开始 | 技术人员已开始对资产进行实际作业。通常表现为状态变更为In Progress,或记录第一笔工时的时间戳。 | ||
| 为什么重要 这是计算积压量的终点和计算实际作业时间的起点,也是衡量SLA Adherence Rate的关键。 获取位置 Hexagon EAM的r5statuslog。转换为“In Progress”(通常状态代码为“I”或“IP”)。 采集 在r5statuslog上执行事务时记录 事件类型 explicit | |||
| 工单已批准 | 表示工单已通过规划和估算审核的状态变更,说明该工作已获授权,可以继续执行。 | ||
| 为什么重要 通过标记计划阶段结束,支持维护计划速度分析。一致性检查职责分离。 获取位置 Hexagon EAM的r5statuslog表。查找状态转换为“A”(Approved)或系统对应状态的记录。 采集 在r5statuslog上执行事务时记录 事件类型 explicit | |||
| 已记录工时 | 技术人员将实际工作时长记录到工单中。每个案例可能多次发生此活动。 | ||
| 为什么重要 这是Labor Hour Variance和Technician Labor Productivity仪表板的基础,可揭示实际投入与计划之间的差异。 获取位置 Hexagon EAM的r5booklabor表。每行代表一条工单(WO)工时表记录。 采集 在r5booklabor上执行INSERT事务时记录 事件类型 explicit | |||
| 物料已发放 | 备件已从库房实际发放并计入工单,代表物料消耗。 | ||
| 为什么重要 这是计算Material Availability Lead Time的终点。可用于识别工作已开始但因缺少备件而中断的延误。 获取位置 Hexagon EAM的r5translines表。事务类型“I”(Issue),并与工单关联。 采集 在r5translines上执行INSERT事务时记录 事件类型 explicit | |||
| 优先级已更新 | 工单创建后,其优先级发生变化。该事件记录变更时间戳和新的优先级值。 | ||
| 为什么重要 用于Priority Escalation and Resource Audit仪表板,以识别优先级滥用或范围蔓延。 获取位置 Hexagon EAM的r5audittrail(启用审计时)或根据快照推断。通常源自evt_priority字段的审计日志。 采集 在evt_priority上执行UPDATE事务时记录 事件类型 explicit | |||
| 工单已排程 | 工单已分配计划开始日期或特定资源,由积压队列进入活动排程。 | ||
| 为什么重要 对于Technician Labor Productivity分析以及了解资源分配效率至关重要。 获取位置 Hexagon EAM的r5events表(更新evt_schedstart)或r5statuslog(转换为“S”,即Scheduled)。 采集 比较状态字段变更前后的值,或检查evt_schedstart更新 事件类型 inferred | |||
| 工单已签核 | 通常需要最终行政审批,以满足合规要求或支付承包商费用,并确认所有数据准确无误。 | ||
| 为什么重要 用于监控Work Order Approval Cycle Analysis。此处延误会影响财务结算速度。 获取位置 Hexagon EAM的r5statuslog(转换为“Signed Off”)或电子签名记录日志。 采集 比较状态字段变更前后的值 事件类型 inferred | |||
| 检查清单项目已验证 | 工单中的特定任务或检查步骤已标记为完成,代表作业内部的细粒度进展。 | ||
| 为什么重要 对于合规和文档完整性至关重要,可证明安全检查已在系统中完成记录。 获取位置 Hexagon EAM的r5checklist或r5activities表。特定活动或任务明细行的状态发生变更。 采集 在r5checklist上执行UPDATE事务时记录 事件类型 explicit | |||
| 物料申请已创建 | 备件或物料申请已关联至工单,供应链子流程由此启动。 | ||
| 为什么重要 这是计算Spare Parts Procurement Lead Times的起点。此处数量较高,说明流程依赖库存可用性。 获取位置 Hexagon EAM的r5requisitions表。通过req_evt(Work Order Code)关联。 采集 在r5requisitions上执行INSERT事务时记录 事件类型 explicit | |||
| 质量控制已通过 | 主管或检查员审核已完成的工作并批准其质量,在关闭工单前验证维修结果。 | ||
| 为什么重要 支持Quality Control Compliance Rate KPI分析。从此处回退的循环表示技术返工。 获取位置 Hexagon EAM的r5statuslog(转换为“Review”或“QC”),或针对特定UDF验证的r5audittrail。 采集 比较状态字段变更前后的值 事件类型 inferred | |||
提取指南
步骤
- 使用具有Advanced Reporting Authoring权限的用户账户登录Hexagon EAM应用。
- 进入Reports模块,通常位于Administration或Reports菜单下,并启动Advanced Reporting界面,通常为Cognos或内置SQL报告构建器。
- 启动新建报告向导,并将数据源类型选择为'SQL'或'Free-hand SQL'。这样可以直接查询数据库,而不是使用标准业务对象模型。
- 复制下方Query部分提供的SQL脚本,并将其粘贴到数据集定义窗口。
- 将[Your Organization Code]和日期范围等占位符替换为适用于您环境的具体值。
- 在编辑器中验证查询语法,确保数据库平台(Oracle或SQL Server)接受UNION语句。
- 将结果列映射到报告布局列表,确保清晰显示WorkOrderNumber、ActivityName和EventTimestamp。
- 将报告配置为导出为CSV或Excel格式,以确保表格结构中没有合并单元格或格式化表头。
- 先以验证期间运行报告,例如最近100个工单,以验证数据结构。
- 验证无误后,将报告设置为定期运行,或针对完整提取时间窗口执行报告。
- 下载输出文件并检查日期格式。如有可能,确保时间戳包含秒,以便准确排序。
- 将生成的CSV文件导入ProcessMind,并将SourceSystem列映射为案例属性,将ActivityName映射为活动分类器。
配置
- 日期范围:建议按EVT_DATE(创建日期)筛选滚动6至12个月的数据,以保持查询性能。
- 组织筛选:Hexagon EAM通常支持多组织。请确保查询包含特定Organization Code筛选条件,避免混入其他业务单元的数据。
- 数据库语法:下方查询尽可能采用ANSI标准SQL,但Hexagon EAM通常运行在Oracle或SQL Server上。可能需要对日期函数进行少量调整,例如SYSDATE与GETDATE之间的差异。
- 状态配置:状态代码(如“A”“C”“R”)与活动名称(如“Work Order Approved”)的映射必须符合您系统的具体状态配置。
- 权限:运行报表的用户账户需要具备对R5EVENTS、R5EVENTSTATUS、R5BOOKEDHOURS、R5TRANSACTIONS和R5AUDITVALUES表的读取权限。
a 示例查询 sql
/* 1. Work Order Created */
SELECT
evt_code AS WorkOrderNumber,
'Work Order Created' AS ActivityName,
evt_created AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
evt_type AS WorkOrderType,
evt_priority AS PriorityCode,
evt_mrc AS MaintenanceDepartment,
evt_updatedby AS UpdatedBy,
evt_target AS TargetCompletionDate,
evt_object AS AssetCode,
NULL AS ActualLaborHours
FROM r5events
WHERE evt_type IN ('JOB', 'PPM') -- Filter for relevant WO types
AND evt_created >= '2023-01-01' -- [Set Start Date]
AND evt_org = 'YOUR_ORG' -- [Set Organization]
UNION ALL
/* 2. Priority Updated (Requires Audit Log) */
SELECT
aud_code AS WorkOrderNumber,
'Priority Updated' AS ActivityName,
aud_date AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
NULL AS WorkOrderType,
aud_value AS PriorityCode,
NULL AS MaintenanceDepartment,
aud_user AS UpdatedBy,
NULL AS TargetCompletionDate,
NULL AS AssetCode,
NULL AS ActualLaborHours
FROM r5auditvalues
WHERE aud_table = 'R5EVENTS'
AND aud_field = 'EVT_PRIORITY'
AND aud_org = 'YOUR_ORG'
UNION ALL
/* 3. Status Changes (Approved, Scheduled, Started, Completed, Signed Off, Closed) */
/* This block maps generic status codes to specific ProcessMind activities */
SELECT
est_event AS WorkOrderNumber,
CASE est_status
WHEN 'A' THEN 'Work Order Approved'
WHEN 'S' THEN 'Work Order Scheduled'
WHEN 'IP' THEN 'Work Order Started'
WHEN 'C' THEN 'Work Order Completed'
WHEN 'QC' THEN 'Quality Control Passed'
WHEN 'SO' THEN 'Work Order Signed Off'
WHEN 'CL' THEN 'Work Order Closed'
ELSE 'Status Change: ' + est_status
END AS ActivityName,
est_date AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
NULL AS WorkOrderType,
NULL AS PriorityCode,
NULL AS MaintenanceDepartment,
est_auth AS UpdatedBy,
NULL AS TargetCompletionDate,
NULL AS AssetCode,
NULL AS ActualLaborHours
FROM r5eventstatus
WHERE est_status IN ('A', 'S', 'IP', 'C', 'QC', 'SO', 'CL')
AND est_org = 'YOUR_ORG'
UNION ALL
/* 4. Material Requisition Created */
SELECT
req_event AS WorkOrderNumber,
'Material Requisition Created' AS ActivityName,
req_created AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
NULL AS WorkOrderType,
NULL AS PriorityCode,
NULL AS MaintenanceDepartment,
req_createdby AS UpdatedBy,
NULL AS TargetCompletionDate,
NULL AS AssetCode,
NULL AS ActualLaborHours
FROM r5requisitions
WHERE req_event IS NOT NULL
AND req_org = 'YOUR_ORG'
UNION ALL
/* 5. Material Issued */
SELECT
trl_event AS WorkOrderNumber,
'Material Issued' AS ActivityName,
trl_date AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
NULL AS WorkOrderType,
NULL AS PriorityCode,
NULL AS MaintenanceDepartment,
trl_user AS UpdatedBy,
NULL AS TargetCompletionDate,
trl_part AS AssetCode, -- Storing Part ID in Asset column for context
NULL AS ActualLaborHours
FROM r5translines
WHERE trl_type = 'I' -- I = Issue
AND trl_event IS NOT NULL
AND trl_org = 'YOUR_ORG'
UNION ALL
/* 6. Labor Hours Recorded */
SELECT
boo_event AS WorkOrderNumber,
'Labor Hours Recorded' AS ActivityName,
boo_entered AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
NULL AS WorkOrderType,
NULL AS PriorityCode,
boo_mrc AS MaintenanceDepartment,
boo_person AS UpdatedBy,
NULL AS TargetCompletionDate,
NULL AS AssetCode,
boo_hours AS ActualLaborHours
FROM r5bookedhours
WHERE boo_event IS NOT NULL
AND boo_org = 'YOUR_ORG'
UNION ALL
/* 7. Checklist Item Verified */
SELECT
ckv_event AS WorkOrderNumber,
'Checklist Item Verified' AS ActivityName,
ckv_entrydate AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
NULL AS WorkOrderType,
NULL AS PriorityCode,
NULL AS MaintenanceDepartment,
ckv_enteredby AS UpdatedBy,
NULL AS TargetCompletionDate,
NULL AS AssetCode,
NULL AS ActualLaborHours
FROM r5checklistvalues
WHERE ckv_completed = '+' -- Logic for completed item depends on config
AND ckv_event IS NOT NULL
AND ckv_org = 'YOUR_ORG' 步骤
- 确认数据库连接:确保您拥有Hexagon EAM Oracle或SQL Server后端数据库的读取权限凭据,通常为服务账户。
- 定位核心表:确认可以访问R5EVENTS(工单表头)、R5STATUS(状态历史)、R5BOOKEDHOURS(人工工时)、R5TRANSACTIONS(物料)和R5AUDITVALUES(审计日志)。
- 映射状态代码:Hexagon EAM使用可配置的状态代码,例如A、C、O、R。查看系统配置(界面:Administration -> Codes),将您系统中的1位或2位代码映射到Approved、Scheduled、Started、Completed、QC Passed、Signed Off和Closed等活动。
- 配置查询:打开下方提供的SQL脚本,将占位状态代码,例如'APPR'、'SCHD'、'COMP',替换为您系统中的实际代码。
- 设置日期范围:更新WHERE子句,按EVT_DATE或TRN_DATE筛选特定时间范围,通常为最近12个月,以确保查询性能。
- 执行提取:在SQL客户端(SQL Developer、SSMS或Toad)中执行查询。
- 验证审计数据:如果“Priority Updated”活动未返回任何行,请检查EAM系统设置中是否已为R5EVENTS表启用审计功能。
- 验证检查清单数据:确保R5CHECKLISTVALUES是您当前版本使用的正确表。旧版本可能使用R5ACTIVITIES记录任务级完成情况。
- 导出数据:将结果集保存为CSV或Parquet文件。确保Timestamp列采用ISO 8601格式(YYYY-MM-DD HH:MM:SS),避免解析错误。
- 导入ProcessMind:将平面文件上传到ProcessMind界面,并将WorkOrderNumber映射为Case ID、ActivityName映射为Activity、EventTimestamp映射为Timestamp。
配置
- 时间窗口筛选:当前查询会选择全部数据。强烈建议在基础CTE或每个SELECT块中添加筛选条件,例如WHERE EVT_DATE >= SYSDATE - 365(Oracle)或GetDate() - 365(SQL Server)。
- 状态代码映射:必须将SQL中的字符串字面量(如“APPR”“COMP”“QC”)替换为R5STATUS集中定义的实际代码。
- 审计配置:“Priority Updated”的提取依赖R5AUDITVALUES表。如果未对EVT_PRIORITY列启用审计,则不会生成此活动。
- 组织/租户:如果您的EAM实例承载多个组织,请添加EVT_ORG或EVT_MRC(部门)筛选条件,避免数据混杂。
- 语言:查询假设列标题为标准英文。如果数据库使用本地化列名,请相应调整。
a 示例查询 sql
/* 1. Work Order Created */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Work Order Created' AS ActivityName,
E.EVT_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
E.EVT_CREATEDBY AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
WHERE E.EVT_TYPE IN ('JOB', 'PPM') -- Filter for Standard and Preventive WOs
UNION ALL
/* 2. Priority Updated (From Audit Log) */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Priority Updated' AS ActivityName,
A.AUD_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
A.AUD_VALUE AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
A.AUD_USER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5AUDITVALUES A ON E.EVT_CODE = A.AUD_KEY1
WHERE A.AUD_TABLE = 'R5EVENTS'
AND A.AUD_FIELD = 'EVT_PRIORITY'
UNION ALL
/* 3. Work Order Approved */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Work Order Approved' AS ActivityName,
S.STA_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
S.STA_UPDATEUSER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5STATUS S ON E.EVT_CODE = S.STA_EVENT
WHERE S.STA_STATUS = 'APPR' -- Replace with your Approved status code
UNION ALL
/* 4. Material Requisition Created */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Material Requisition Created' AS ActivityName,
R.REQ_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
R.REQ_CREATEDBY AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5REQUISITIONS R ON E.EVT_CODE = R.REQ_EVENT
UNION ALL
/* 5. Work Order Scheduled */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Work Order Scheduled' AS ActivityName,
S.STA_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
S.STA_UPDATEUSER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5STATUS S ON E.EVT_CODE = S.STA_EVENT
WHERE S.STA_STATUS = 'SCHD' -- Replace with your Scheduled status code
UNION ALL
/* 6. Work Order Started */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Work Order Started' AS ActivityName,
S.STA_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
S.STA_UPDATEUSER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5STATUS S ON E.EVT_CODE = S.STA_EVENT
WHERE S.STA_STATUS IN ('STRT', 'INPRG') -- Replace with your Started/In Progress status codes
UNION ALL
/* 7. Material Issued */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Material Issued' AS ActivityName,
T.TRN_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
T.TRN_USER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5TRANSACTIONS T ON E.EVT_CODE = T.TRN_EVENT
WHERE T.TRN_TYPE = 'ISSUE' -- Indicates material issue from store
UNION ALL
/* 8. Labor Hours Recorded */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Labor Hours Recorded' AS ActivityName,
B.BOO_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
B.BOO_PERSON AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
B.BOO_HOURS AS ActualLaborHours
FROM R5EVENTS E
JOIN R5BOOKEDHOURS B ON E.EVT_CODE = B.BOO_EVENT
UNION ALL
/* 9. Checklist Item Verified */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Checklist Item Verified' AS ActivityName,
C.CKV_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
C.CKV_ENTEREDBY AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5CHECKLISTVALUES C ON E.EVT_CODE = C.CKV_EVENT
WHERE C.CKV_COMPLETED = '+' -- Assuming '+' indicates checked/complete
UNION ALL
/* 10. Work Order Completed */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Work Order Completed' AS ActivityName,
S.STA_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
S.STA_UPDATEUSER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5STATUS S ON E.EVT_CODE = S.STA_EVENT
WHERE S.STA_STATUS = 'COMP' -- Replace with your Completed status code
UNION ALL
/* 11. Quality Control Passed */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Quality Control Passed' AS ActivityName,
S.STA_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
S.STA_UPDATEUSER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5STATUS S ON E.EVT_CODE = S.STA_EVENT
WHERE S.STA_STATUS = 'QC' -- Replace with your QC Passed status code
UNION ALL
/* 12. Work Order Signed Off */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Work Order Signed Off' AS ActivityName,
S.STA_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
S.STA_UPDATEUSER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5STATUS S ON E.EVT_CODE = S.STA_EVENT
WHERE S.STA_STATUS = 'SIGNOFF' -- Replace with your Sign Off status code
UNION ALL
/* 13. Work Order Closed */
SELECT
E.EVT_CODE AS WorkOrderNumber,
'Work Order Closed' AS ActivityName,
S.STA_DATE AS EventTimestamp,
'Hexagon EAM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
E.EVT_TYPE AS WorkOrderType,
E.EVT_PRIORITY AS PriorityCode,
E.EVT_MRC AS MaintenanceDepartment,
S.STA_UPDATEUSER AS UpdatedBy,
E.EVT_TARGET AS TargetCompletionDate,
E.EVT_OBJECT AS AssetCode,
NULL AS ActualLaborHours
FROM R5EVENTS E
JOIN R5STATUS S ON E.EVT_CODE = S.STA_EVENT
WHERE S.STA_STATUS = 'CLOS' -- Replace with your Closed status code 步骤
- 确认已安装、获得许可并授权使用Hexagon EAM Databridge Outbound,以提取所需的维护工单数据。确认出站事务配置、目标位置、调度能力,以及对源表或视图的访问权限。由于不同EAM版本的菜单名称和事务标识符可能不同,请使用[Configure based on your system]查找适用的管理菜单路径。
- 确定Hexagon EAM中用于工单表头、工单状态历史、优先级历史、物料申请、物料发放、人工事务、检查清单或检验结果、排程分配、质量审批、签核记录和关闭记录的权威表或视图。将查询中的每个[Your ... table name]占位符替换为您环境中的对应对象。不要假设当前工单表头包含历史变更。
- 配置Databridge Outbound,在相关工单变更提交时发布XML或CSV事务。包含工单编号、事件类型、事件时间戳、源用户、优先级、工单类型、部门、目标完成日期、资产、实际人工工时以及刷新或提取时间戳。如果状态、人工、物料、检查清单、排程、质量、签核或关闭事件的源事务结构不同,请分别配置出站映射。
- 配置出站载荷,使每个业务发生记录为一条独立事件。不要只发送最新工单状态。对于重复的人工记录、物料发放、检查清单项目、优先级变更或其他重复发生的事件,每次发生都输出一条记录。将Databridge事件类型映射到13个必需的ActivityName值之一。
- 将Databridge生成的XML或CSV输出写入受控暂存位置,然后加载到查询引用的数据库对象中,或将查询源对象替换为暂存表。保留原始事件标识符、工单编号、事件时间戳、源用户和LastDataUpdate。如果Databridge发送XML,请先将重复事件节点解析为行,再应用活动映射。如果发送CSV,请验证分隔符、引号、编码和时间戳格式。
- 替换查询中与连接相关对象、日期参数和公司筛选条件对应的占位符。查询为每项活动使用规范化事件源,并通过UNION ALL合并结果。确保每个区块使用的源列具有兼容的数据类型。如果源系统不提供建议属性,请为该属性返回NULL,不要虚构值。
- 首次运行查询时,选择约3至6个月的时间范围。确认结果包含必需列WorkOrderNumber、ActivityName、EventTimestamp、SourceSystem和LastDataUpdate,以及可用的建议属性。按WorkOrderNumber、EventTimestamp和ActivityName排序,同时保留代表不同源事件的重复行。
- 将提取行数与Databridge交付数量、源事务数量以及Hexagon EAM中的部分工单进行核对。调查缺失的状态历史、重复交付、无效时间戳和超出所选日期范围的事件。仅当同一源事件被重复交付时,才应用稳定的去重规则。
- 将最终结果导出为UTF-8 CSV或其他ProcessMind支持的事件日志格式。每行保留一个事件,使用统一的时间戳并处理时区,将WorkOrderNumber映射为案例标识符、ActivityName映射为活动、EventTimestamp映射为事件时间戳。将文件上传到ProcessMind,并确认事件模型中包含全部13个活动名称。
配置
- 将Hexagon EAM Databridge Outbound配置为按事件级别交付XML或CSV。具体事务名称、管理界面和菜单路径取决于已安装的Hexagon EAM版本,因此请使用[Configure based on your system],不要假设某个版本的固定路径。
- 将WorkOrderNumber配置为ProcessMind案例标识符,将ActivityName配置为活动字段,将EventTimestamp配置为事件时间戳。SourceSystem应填充为Hexagon EAM,LastDataUpdate应标识提取或刷新时间。
- 为全部13项活动配置出站映射:Work Order Created、Priority Updated、Work Order Approved、Material Requisition Created、Work Order Scheduled、Work Order Started、Material Issued、Labor Hours Recorded、Checklist Item Verified、Work Order Completed、Quality Control Passed、Work Order Signed Off和Work Order Closed。
- 保留历史发生记录。仅凭当前状态字段,无法重建每次状态转换、优先级更新、人工记录、物料发放、检查清单验证、审批或签字。
- 初次提取使用3至6个月的日期范围。增量加载使用Databridge交付时间或LastDataUpdate水位线,并设置较小的重叠窗口,以防遗漏延迟到达的事务。
- 仅在分析确有需要时,应用公司、站点、组织、工单类型、部门和状态筛选条件。组织特定限制请使用[Your company filter]或[Configure based on your system]。
- 如果分析覆盖完整生命周期,请包含已关闭工单。仅筛选未关闭工单会遗漏完成、质量、签字和关闭活动。
- 明确配置时区处理。上传ProcessMind前,将所有源时间戳转换为统一约定的时区,并在可用时保留原始时区或偏移量。
- 对于大型数据集,请在源端筛选、限制提取窗口、为事件时间戳和工单编号建立索引或分区,并在转换前暂存Databridge文件。避免反复解析完整历史XML负载。
- 必要前置条件包括可用的Databridge Outbound、读取相关EAM数据的授权、访问出站目标或暂存数据库的权限,以及访问工单、状态、物料、人工、检查清单、排程、审批、质量、签字和关闭数据的权限。
- 如果某项必需业务事件无法作为原生Databridge事务提供,请配置源视图或暂存转换,输出一条明确的事件记录。ProcessMind不会根据其他记录推断缺失活动。
a 示例查询 sql
WITH
created_events AS (
SELECT
CAST(c.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Work Order Created' AS VARCHAR(100)) AS ActivityName,
CAST(c.[CreatedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(c.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(c.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(c.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(c.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(c.[CreatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(c.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(c.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(c.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your work order creation table or view] c
WHERE c.[CreatedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND c.[CreatedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
priority_events AS (
SELECT
CAST(p.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Priority Updated' AS VARCHAR(100)) AS ActivityName,
CAST(p.[PriorityChangedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(p.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(p.[NewPriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(p.[UpdatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your priority history table or view] p
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = p.[WorkOrderNumber]
WHERE p.[PriorityChangedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND p.[PriorityChangedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
approved_events AS (
SELECT
CAST(s.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Work Order Approved' AS VARCHAR(100)) AS ActivityName,
CAST(s.[StatusChangedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(s.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(s.[UpdatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your work order status history table or view] s
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = s.[WorkOrderNumber]
WHERE s.[NewStatus] = '[Your approved status value]'
AND s.[StatusChangedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND s.[StatusChangedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
requisition_events AS (
SELECT
CAST(r.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Material Requisition Created' AS VARCHAR(100)) AS ActivityName,
CAST(r.[RequisitionCreatedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(r.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(r.[CreatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your material requisition table or view] r
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = r.[WorkOrderNumber]
WHERE r.[RequisitionCreatedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND r.[RequisitionCreatedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
scheduled_events AS (
SELECT
CAST(a.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Work Order Scheduled' AS VARCHAR(100)) AS ActivityName,
CAST(a.[ScheduledTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(a.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(a.[UpdatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(a.[ScheduledStartDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your work order scheduling table or view] a
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = a.[WorkOrderNumber]
WHERE a.[ScheduledTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND a.[ScheduledTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
started_events AS (
SELECT
CAST(s.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Work Order Started' AS VARCHAR(100)) AS ActivityName,
CAST(s.[StatusChangedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(s.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(s.[UpdatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your work order status history table or view] s
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = s.[WorkOrderNumber]
WHERE s.[NewStatus] IN ('[Your in progress status value]', '[Your started status value]')
AND s.[StatusChangedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND s.[StatusChangedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
issued_events AS (
SELECT
CAST(i.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Material Issued' AS VARCHAR(100)) AS ActivityName,
CAST(i.[IssueTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(i.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(i.[IssuedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your material issue table or view] i
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = i.[WorkOrderNumber]
WHERE i.[IssueTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND i.[IssueTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
labor_events AS (
SELECT
CAST(l.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Labor Hours Recorded' AS VARCHAR(100)) AS ActivityName,
CAST(l.[LaborEntryTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(l.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(l.[RecordedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(l.[LaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your labor transaction table or view] l
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = l.[WorkOrderNumber]
WHERE l.[LaborEntryTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND l.[LaborEntryTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
checklist_events AS (
SELECT
CAST(k.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Checklist Item Verified' AS VARCHAR(100)) AS ActivityName,
CAST(k.[VerifiedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(k.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(k.[VerifiedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your checklist verification table or view] k
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = k.[WorkOrderNumber]
WHERE k.[VerifiedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND k.[VerifiedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
completed_events AS (
SELECT
CAST(s.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Work Order Completed' AS VARCHAR(100)) AS ActivityName,
CAST(s.[StatusChangedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(s.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(s.[UpdatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your work order status history table or view] s
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = s.[WorkOrderNumber]
WHERE s.[NewStatus] = '[Your completed status value]'
AND s.[StatusChangedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND s.[StatusChangedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
quality_events AS (
SELECT
CAST(q.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Quality Control Passed' AS VARCHAR(100)) AS ActivityName,
CAST(q.[QualityApprovalTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(q.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(q.[ApprovedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your quality approval table or view] q
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = q.[WorkOrderNumber]
WHERE q.[QualityResult] = '[Your quality passed value]'
AND q.[QualityApprovalTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND q.[QualityApprovalTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
signoff_events AS (
SELECT
CAST(f.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Work Order Signed Off' AS VARCHAR(100)) AS ActivityName,
CAST(f.[SignOffTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(f.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(f.[SignedOffBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your work order sign-off table or view] f
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = f.[WorkOrderNumber]
WHERE f.[SignOffTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND f.[SignOffTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
),
closed_events AS (
SELECT
CAST(s.[WorkOrderNumber] AS VARCHAR(100)) AS WorkOrderNumber,
CAST('Work Order Closed' AS VARCHAR(100)) AS ActivityName,
CAST(s.[StatusChangedTimestamp] AS TIMESTAMP) AS EventTimestamp,
CAST('Hexagon EAM' AS VARCHAR(100)) AS SourceSystem,
CAST(s.[LastDataUpdate] AS TIMESTAMP) AS LastDataUpdate,
CAST(w.[WorkOrderType] AS VARCHAR(100)) AS WorkOrderType,
CAST(w.[PriorityCode] AS VARCHAR(100)) AS PriorityCode,
CAST(w.[MaintenanceDepartment] AS VARCHAR(100)) AS MaintenanceDepartment,
CAST(s.[UpdatedBy] AS VARCHAR(100)) AS UpdatedBy,
CAST(w.[TargetCompletionDate] AS TIMESTAMP) AS TargetCompletionDate,
CAST(w.[AssetCode] AS VARCHAR(100)) AS AssetCode,
CAST(w.[ActualLaborHours] AS DECIMAL(18,2)) AS ActualLaborHours
FROM [Your work order status history table or view] s
LEFT JOIN [Your work order current or history table or view] w ON w.[WorkOrderNumber] = s.[WorkOrderNumber]
WHERE s.[NewStatus] = '[Your closed status value]'
AND s.[StatusChangedTimestamp] >= CAST('[Start date parameter]' AS TIMESTAMP)
AND s.[StatusChangedTimestamp] < CAST('[End date parameter]' AS TIMESTAMP)
AND [Your company filter]
)
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM created_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM priority_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM approved_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM requisition_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM scheduled_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM started_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM issued_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM labor_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM checklist_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM completed_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM quality_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM signoff_events
UNION ALL
SELECT WorkOrderNumber, ActivityName, EventTimestamp, SourceSystem, LastDataUpdate, WorkOrderType, PriorityCode, MaintenanceDepartment, UpdatedBy, TargetCompletionDate, AssetCode, ActualLaborHours FROM closed_events
ORDER BY WorkOrderNumber, EventTimestamp, ActivityName; 立即减少资产维护延误,提升绩效
将周期时间缩短30%,消除隐藏瓶颈。
无需信用卡,几分钟即可完成设置。