您的仓库管理数据模板
您的仓库管理数据模板
- 全面分析的推荐属性
- 流程中需追踪的关键活动
- SAP EWM 数据提取指南
仓库管理属性
| 名称 | 描述 | ||
|---|---|---|---|
| 仓库订单 WarehouseOrder | 仓库订单的唯一标识符,它将一组由资源执行的仓库任务进行分组。 | ||
| 描述 仓库订单(Warehouse Order)是追踪仓库内货物处理端到端流程的主要“Case ID”。它代表一个工作包,例如为出库交货单拣货或为收到的货物上架。每个仓库订单包含一个或多个仓库任务。\n\n在流程挖掘中,按仓库订单分析可以全面查看特定工作包的整个生命周期。这有助于识别瓶颈、衡量从创建到完成的整体周期时间,并深入理解与单个物流指令相关联的完整活动流。 为何重要 这是连接所有相关仓库活动的核心标识符,支持对单个工作单元进行端到端流程分析和周期时间衡量。 获取方式 此标识符通常位于 SAP EWM 仓库订单抬头表中,例如 /SCWM/WHO。 示例 200000145200000146200000147 | |||
| 最后数据更新 LastDataUpdate | 标识该记录上次从来源系统刷新数据的时间戳。 | ||
| 描述 此属性记录数据最后一次从源系统提取的时间。它为所分析数据的时效性提供了关键背景。\n\n在任何分析或仪表板中,了解数据的近时性对于做出明智决策都至关重要。此时间戳帮助用户确认他们查看的是实时信息还是特定时间点的快照,从而管理对数据实时性的预期。 为何重要 指示数据的实时程度,这对于用户了解其流程分析的时效性至关重要。 获取方式 这是一个元数据字段,通常在数据提取(ETL)过程中生成并添加。它反映了数据加载的时间戳。 示例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| 开始时间 EventTime | 指示活动或事件开始的时间戳。 | ||
| 描述 此属性记录特定仓库活动发生的准确日期和时间。它是用于排列事件顺序及计算事件间时长的主要时间元素。\n\n在流程挖掘中,开始时间对于按时间顺序构建每个 Case 的事件序列至关重要。它用于计算周期时间、等待时间和处理时间,这些对于性能分析、瓶颈识别和 SLA 监控都非常关键。 为何重要 此时间戳对于按时间顺序排列事件以及计算所有基于时间的性能指标(如周期时间和时长)至关重要。 获取方式 通常见于事件或确认表,如 /SCWM/ORDIM_C(例如字段 CONF_TIMESTAMP),或与仓库订单及任务相关的状态变更日志。 示例 2023-10-26T10:00:00Z2023-10-26T10:15:30Z2023-10-26T11:20:00Z | |||
| 活动名称 ActivityName | 发生的特定仓库管理活动或事件的名称,例如“拣货任务已创建”或“发货已过账”。 | ||
| 描述 此属性描述仓库管理流程中的单个步骤或事件。这些活动是流程图的构建块,代表创建、确认、包装、装载和货物移动等任务。\n\n分析这些活动的顺序和频率是流程挖掘的基础。它有助于可视化流程流,识别常见和罕见路径,检测偏离标准程序的情况,并精准定位导致延迟或返工的特定步骤。 为何重要 它定义了流程中的步骤,构成了流程图的基础,并支持对流程流向、偏差和瓶颈进行分析。 获取方式 衍生自与仓库订单和任务相关的状态变更、事件消息或事务日志,例如表 /SCWM/ORDIM_C(确认)或通过解析 /SCWM/WHO 和 /SCWM/ORDIM_O 中的状态字段。 示例 拣货任务已确认上架任务已创建收货过账完成仓库订单已完成 | |||
| 源系统 SourceSystem | 识别提取数据的源系统,例如 SAP EWM 生产实例。 | ||
| 描述 此属性指定仓库管理数据的来源系统。在拥有多个系统的企业环境中,标注数据来源对于可追溯性和背景理解至关重要。\n\n在分析中,这有助于区分可能跨越多个系统的流程,或者允许比较来自不同实例(如不同地区的独立系统)的流程。它确保了数据谱系清晰且可审计。 为何重要 提供可追溯性和上下文,尤其是在拥有多个 SAP 实例或集成系统的环境中,确保数据谱系清晰明确。 获取方式 这通常是在提取、转换和加载(ETL)过程中添加的静态值,用于标识特定的 SAP S/4HANA 或 EWM 实例。 示例 SAP_EWM_PROD_EUS4H_US_100EWM_APAC_PRD | |||
| 仓库订单状态 WarehouseOrderStatus | 仓库订单的当前或最终状态,例如“已完成”或“已取消”。 | ||
| 描述 此属性指示仓库订单的最终结果。了解订单是成功完成还是被取消,对于分析流程成功率和识别未完成原因至关重要。\n\n这是许多分析的关键过滤器。例如,在计算端到端仓库周期时间时,通常仅对已完成的订单进行分析。它还有助于识别并调查取消订单的频率及其根本原因。 为何重要 指示案例的结果,支持对已完成订单和已取消订单进行筛选,这对于准确分析周期时间和吞吐量至关重要。 获取方式 状态字段通常位于仓库订单抬头表 /SCWM/WHO 中。 示例 已完成处理中已取消 | |||
| 仓库订单类型 WarehouseOrderType | 按用途对仓库订单进行分类,例如上架、拣货或内部补货。 | ||
| 描述 仓库订单类型(Warehouse Order Type)根据订单的物流功能进行分类。这种区分非常关键,因为不同类型的订单遵循不同的流程路径,且绩效预期也不同。\n\n在分析中,此属性是过滤和对比的核心维度。例如,“仓库订单吞吐量与数量”仪表板依靠它来细分入库(上架)与出库(拣货)流程的绩效,从而提供更有价值的仓库运营视图。 为何重要 支持根据流程类别(例如入库 vs. 出库)对分析进行细分,从而获得更具相关性的对比和见解。 获取方式 这取决于仓库流程类型,通常可在仓库订单抬头表 /SCWM/WHO 中找到。 示例 PICKPUTWREPLSTGE | |||
| 优先级 Priority | 分配给仓库订单的优先级,表示其紧急程度(如:高、中、低)。 | ||
| 描述 此属性根据业务重要性或紧急程度对仓库订单进行分类。例如,高优先级订单可能对应快递发货或关键生产供应,需要加急处理。\n\n优先级是“高优先级订单履行达成率”仪表板和 KPI 的关键维度。它支持对绩效进行过滤和细分,确保最关键的订单在预期时间内得到处理,使仓库运营与业务目标保持一致。 为何重要 支持优先分析和监控,确保高紧迫性订单满足服务水平要求,直接提升客户满意度。 获取方式 优先级可在底层交货单据中设置并传递至仓库订单。通常可在 /SCWM/WHO 等表中找到该字段。 示例 高中低 | |||
| 处理时间 ProcessingTime | 在某项活动上实际投入的工作时长。 | ||
| 描述 处理时间(Processing time)衡量的是活动的实际“操作时间”,即活动开始与结束时间戳之间的差额。这与周期时间(cycle time)不同,后者包含了活动间的等待时长。\n\n此指标是性能分析的核心,对于“拣货与包装效率”等仪表板尤为重要。它能帮助锁定最耗时的特定任务,使管理者能集中精力改进处理时间最长的活动,从而提升整体吞吐量。 为何重要 衡量一项活动的实际工作时长,有助于识别最耗时的任务,并为资源能力分析提供基础。 获取方式 这是一个计算指标,由每个活动的 EventEndTime 减去 EventTime 得出。 示例 3009150 | |||
| 物料编号 MaterialNumber | 仓库任务中处理的产品或物料的唯一标识符。 | ||
| 描述 此属性指定正在移动、拣取、包装或接收的物料。它是基于产品特性细分并分析仓库绩效的关键维度。\n\n按物料编号分析有助于解答以下问题:哪些产品的上架时间最长、哪些最常涉及拣货错误,或哪些需要质检。这对于“收货与上架绩效”和“质检提前期”仪表板至关重要。 为何重要 允许按产品对流程数据进行筛选和细分,这对于识别搬运、存储或质检中的产品特定问题至关重要。 获取方式 此信息通常位于 /SCWM/ORDIM_O 等仓库任务表中,并链接到物料主数据。 示例 FIN-1001RAW-2050SFIN-300-A | |||
| 用户ID User | 确认或执行活动的仓库操作员或用户的标识符。 | ||
| 描述 此属性捕获负责执行仓库任务的人员用户 ID。这可以是确认拣货的拣货员、包装站的包装员,或者是确认上架的叉车操作员。\n\n此数据对于“资源与设备利用率”仪表板至关重要。它支持分析个人或团队绩效,帮助识别培训需求,并可用于在仓库员工之间更有效地平衡工作负载。 为何重要 将工作归属到具体人员,支持按用户或团队进行绩效分析,并辅助资源管理和工作负载平衡。 获取方式 通常见于仓库任务的确认数据,例如表 /SCWM/ORDIM_C 中的字段 UNAME。 示例 JSMITHARODRIGUEZOPERATOR_05 | |||
| 结束时间 EventEndTime | 指示活动或事件完成的时间戳。 | ||
| 描述 此属性记录特定仓库活动结束的日期和时间。对于原子事件,它通常与开始时间相同,但对于包装或装载等具有持续时间的活动,两者则不同。\n\n拥有明确的结束时间可以精确计算单个活动的处理时间。这对于分析特定步骤时长的性能仪表板(如“拣货与包装效率”)至关重要,有助于识别哪些任务最耗时。 为何重要 支持精确计算单个活动的持续时间,这是识别耗时步骤和资源密集型任务的关键。 获取方式 对于离散事件,通常与开始时间戳相同。对于持续时间较长的任务,它可能是 /SCWM/ORDIM_C 等表中的独立字段,或者是衍生自随后的状态变更。 示例 2023-10-26T10:05:00Z2023-10-26T10:25:45Z2023-10-26T11:20:00Z | |||
| 仓库任务 WarehouseTask | 单个仓库任务的唯一标识符,仓库任务是仓库订单的组成部分。 | ||
| 描述 仓库任务是执行特定货物移动的指令,例如将产品从存储位移动到包装站。一个仓库订单包含一个或多个此类任务。 在任务级别进行分析可以提供更细致的仓库运营视图。这有助于了解特定移动路径的资源绩效、识别难以到达的存储位,或分析单个拣货或上架活动的效率。 为何重要 提供极细粒度的细节分析,支持检查大型仓库订单中的单个移动和步骤。 获取方式 存在于仓库任务表中,如 /SCWM/ORDIM_O(任务数据)和 /SCWM/ORDIM_C(确认数据)。 示例 300000451300000452300000453 | |||
| 实际数量 ActualQuantity | 用户为某项仓库任务确认的物料实际数量。 | ||
| 描述 此属性是仓库操作员实际处理并确认的数量。这可以是拣取的数量、上架的数量,或者是收货时清点的数量。\n\n对比实际数量与计划数量是“库存差异分析”的基础。两者之间的差异会直接揭示需要调查的流程异常。这是对运营准确性的直接衡量,也是“库存准确率”和“拣货错误率”KPI 的核心输入。 为何重要 这是实际处理情况的真实依据。将其与计划数量对比可直接衡量运营准确性并识别错误。 获取方式 存在于仓库任务确认数据中,例如在表 /SCWM/ORDIM_C 中,通常位于像 NDIFF(差异数量)这样的字段中,或衍生自确认数量。 示例 10049250 | |||
| 库存地点 StorageLocation | 仓库内的特定位置(如货位),货物由此移入或移出。 | ||
| 描述 此属性标识仓库任务涉及的物理位置,例如拣货的源货位或上架的目标货位。粒度可以从宽泛区域到特定的货架坐标。\n\n按存储位置分析可以揭示运营洞察,例如识别具有高拣货率的“黄金区域”或经常出现延迟或错误的故障区域。它也可用于“拣货路径遵守度”分析,以了解拣货员在仓库中的移动轨迹。 为何重要 提供仓库内的地理背景信息,支持对移动效率、货位可达性和拣货路径优化的分析。 获取方式 通常见于 /SCWM/ORDIM_O 等仓库任务表,包含源货位 (VLPLA) 和目标货位 (NLPLA) 信息。 示例 01-02-03PACK-STATION-01GI-ZONE-A | |||
| 所用设备 EquipmentUsed | 用于执行仓库任务的设备标识符(如叉车或手动托盘车)。 | ||
| 描述 此属性指定分配给或用于仓库任务的物料搬运设备。这可以是特定的叉车、自动导引车 (AGV) 或特定类型的推车。\n\n此数据是“资源与设备利用率”仪表板和“设备利用率”KPI 的基础。通过追踪设备用途及其使用时长,管理者可以分析利用模式、安排维护,并针对车队规模和构成做出明智决策。 为何重要 支持对设备利用率和效率进行分析,有助于优化车队管理并识别资源瓶颈。 获取方式 如果 SAP EWM 中配置了资源管理,此信息可能存储在仓库任务或订单详情中。请参考 SAP Extended Warehouse Management 文档。 示例 FORKLIFT-07AGV-02CART-15 | |||
| 数量差异 QuantityVariance | 任务计划数量与实际确认数量之间的差异。 | ||
| 描述 此计算指标量化了在仓库任务中发现的差异。非零值表示实际物理情况与系统记录不符,预示着可能存在拣货错误、收货失误或物品损坏等问题。\n\n此属性通过突出错误的严重程度,直接支持“库存差异分析”仪表板。分析这些偏差的频率和程度有助于查明库存管理和运营执行中的系统性问题,从而指导准确性的提升。 为何重要 直接量化库存和运营的不准确性,便于发现和分析差异的规模。 获取方式 通过每个相关任务的实际数量(ActualQuantity)减去计划数量(PlannedQuantity)计算得出。 示例 0-15 | |||
| 是否按时 IsOnTime | 指示仓库订单是否在要求的完成日期前完成的布尔标志。 | ||
| 描述 此标志为 SLA 遵守情况提供简单的二进制结果。它评估仓库订单的最终完成事件是否发生在指定的要求完成日期当天或之前。\n\n此属性对于“高优先级订单履行达成率”仪表板至关重要。通过支持对准时与延迟订单进行轻松计数和过滤,它简化了 KPI 和可视化的创建。这有助于在不进行复杂日期计算的情况下,快速评估相对于服务水平目标的绩效。 为何重要 通过为每个订单提供明确的“准时”或“延迟”二进制指标,简化 SLA 绩效分析。 获取方式 这是一个计算属性。其逻辑是将“仓库订单已完成”活动的时间戳与“RequestedCompletionDate”属性进行对比。 示例 truefalse | |||
| 端到端周期时间 EndToEndCycleTime | 仓库订单从创建到最终完成所经过的总时间。 | ||
| 描述 此 KPI 衡量仓库订单生命周期的全时长。它是反映仓库运营整体效率和速度的关键高层指标。\n\n此指标是“端到端仓库周期时间”仪表板的基石。长期追踪此 KPI,并按订单类型或物料等维度进行细分,有助于识别系统性低效,并衡量流程改进措施对整个运营的影响。 为何重要 这是衡量仓库流程整体效率的核心 KPI,提供了运营绩效的高层级视图。 获取方式 在案例级别通过最后一个事件(“仓库订单已完成”)的时间戳减去第一个事件(“仓库订单已创建”)的时间戳计算得出。 示例 8640017280043200 | |||
| 要求完成日期 RequestedCompletionDate | 要求完成高优先级仓库订单的日期。 | ||
| 描述 此属性定义了仓库订单的服务水平协议 (SLA) 或目标完成日期。它是衡量实际完成时间以确定订单是否准时履行的截止期限。\n\n该日期对于计算“高优先级订单履行率”KPI 至关重要。通过将实际完成时间戳与此要求日期进行对比,分析可以量化对服务水平的遵守情况,并突出显示存在延期风险或已经延期的订单。 为何重要 定义订单的 SLA,作为衡量准时履行绩效的基准,尤其是对于高优先级物料。 获取方式 此日期通常衍生自触发仓库订单的出库交货单上的计划发货日期或交货日期。请参考 SAP Extended Warehouse Management 文档。 示例 2023-10-27T17:00:00Z2023-10-28T12:00:00Z | |||
| 计划发货时间 PlannedDepartureTime | 计划从仓库发货的预定时间。 | ||
| 描述 此属性代表在所有拣货、包装和装载活动完成后发货的目标时间。它是衡量出库流程最后阶段准时绩效的基准。\n\n此时间戳对于“出货准时率”仪表板至关重要。通过对比实际发货时间与此计划时间,分析可以识别装货、承运商协调或单据处理方面的延迟,从而深入洞察物流和运输规划效率。 为何重要 为衡量准时发货绩效提供基准,这是物流规划和满足承运商计划的关键。 获取方式 此信息通常是链接到仓库订单的运输或发货单据的一部分。请参考 SAP Extended Warehouse Management 文档。 示例 2023-10-27T18:00:00Z2023-10-28T14:00:00Z | |||
| 计划数量 PlannedQuantity | 给定仓库任务的物料预期数量。 | ||
| 描述 此属性代表根据仓库任务指令应移动、拣取或接收的物料目标数量。它是对比实际执行数量的基准。\n\n计划数量对于“库存差异分析”仪表板和“库存准确率”KPI 至关重要。通过将其与实际数量对比,系统可以识别可能指向拣货错误、收货失误或数据录入问题的差异,从而助力提升库存准确性。 为何重要 作为计算库存准确性和识别差异的基准,这对于维持正确的库存水平至关重要。 获取方式 存在于仓库任务数据中,例如在表 /SCWM/ORDIM_O 中,通常位于像 NISTA(目标数量)这样的字段中。 示例 10050250 | |||
仓库管理活动
| 活动 | 描述 | ||
|---|---|---|---|
| 上架任务已确认 | 仓库操作员确认上架仓库任务已完成,意味着货物已实际放入指定的存储位。此确认会实时更新库存位置。 | ||
| 为何重要 此活动是入库处理的关键里程碑,确认库存可供拣选。此处的延迟将直接影响“收货到上架周期时间”这一 KPI。 获取方式 从仓库任务表 /SCWM/WT 中的确认时间戳(字段 CONFIRMED_AT)捕获。任务状态 (STAT) 也会更改为“已确认”。 捕获 使用 /SCWM/WT 表中与仓库订单关联的上架任务的确认时间戳。 事件类型 explicit | |||
| 仓库订单已创建 | 此活动标志着仓库订单 (WO) 的创建,它是由多个仓库任务组成的工作包。系统根据活动区域、队列或产品等标准生成 WO,为仓库员工整合并组织工作。 | ||
| 为何重要 这是仓库执行流程的主要开始事件。分析从创建到执行首个动作的时间,有助于识别任务分配和资源配置方面的延迟。 获取方式 此事件是从仓库订单抬头表 /SCWM/WHO 中的创建时间戳(字段 CREATED_AT)捕获的。 捕获 从 /SCWM/WHO 表中提取每个仓库订单号 (WHO) 的创建时间戳。 事件类型 explicit | |||
| 仓库订单已完成 | 在所有相关仓库任务确认后,仓库订单状态将设为“已完成”。从执行角度看,这标志着该工作包的结束。 | ||
| 为何重要 这是流程的主要成功结束事件。它对于计算端到端仓库周期时间和衡量整体吞吐量至关重要。 获取方式 通过跟踪仓库订单抬头表 /SCWM/WHO 中状态字段 (STAT) 变更为“已完成”来捕获。可以使用该表的更改日志 (DBTABLOG) 或专用的时间戳字段。 捕获 识别 /SCWM/WHO 中状态设置为“C”(已完成)的时间戳。 事件类型 inferred | |||
| 发货出库已过账 | 这是系统中正式从仓库库存中移除货物的最后一个物流和财务步骤。它标志着法律所有权的转移以及货物正式发运离港。 | ||
| 为何重要 出库流的关键终点,触发计费和库存更新。它是衡量准时发货以及“发货装载与派遣时间”KPI 的核心组成部分。 获取方式 衍生自与仓库订单关联的出库交货单据的过账情况。请检查表 /SCDL/DB_PROCH_O 中的单据流或状态字段(例如 DGI_STAT)。 捕获 识别相关出库交货的“发货出库”状态设置为“已完成”的时间戳。 事件类型 explicit | |||
| 打包完成 | 此活动表示发货的所有物品已装入处理单位(HU),且该单位现已关闭并贴标。包装好的货物已准备好进入下一阶段,如暂存或装货。 | ||
| 为何重要 此里程碑标志着包装阶段的结束。它是暂存和发货的前提,因此此处的任何延迟都会直接影响整体提前期以及“包装与暂存提前期”KPI。 获取方式 可以在处理单位 (HU) 状态设置为“已关闭”或仓库订单 (WO) 的最后一个包装相关仓库任务确认时捕获。/SCWM/HUHDR 表包含 HU 状态信息。 捕获 识别与订单关联的最终发货处理单位关闭或完成的时间戳。 事件类型 inferred | |||
| 拣货任务已确认 | 仓库操作员确认拣货仓库任务已完成,表明货物已从存储位置实际取出。这通常通过 RF 扫描枪完成。 | ||
| 为何重要 这是订单履行中的关键里程碑,直接影响“订单到发货”的周期时间。分析此活动有助于衡量拣货员效率并识别拣货瓶颈。 获取方式 从仓库任务表 /SCWM/WT 中的确认时间戳(字段 CONFIRMED_AT)捕获。任务状态 (STAT) 更新为“已确认”。 捕获 使用 /SCWM/WT 表中与仓库订单关联的拣货任务的确认时间戳。 事件类型 explicit | |||
| 上架任务已创建 | 系统生成一个特定的指令——仓库任务 (WT),将收到的货物从接收区移至最终货位。此活动代表系统已准备好执行上架移动。 | ||
| 为何重要 追踪任务创建与确认之间的时间,可以揭示仓库操作员领取并执行上架指令所需的时间,从而凸显潜在的人力或设备短缺。 获取方式 从表 /SCWM/WT 中流程类型显示为上架的相关仓库任务的创建时间戳(字段 CREATED_AT)捕获。 捕获 筛选与该仓库订单关联且流程类型为上架的仓库任务,并使用它们的创建时间戳。 事件类型 explicit | |||
| 仓库订单已取消 | 仓库订单在所有任务完成前被取消,导致执行中断。这通常由于缺货、客户订单变更或其他异常情况引起。 | ||
| 为何重要 代表失败或异常路径。分析取消操作的频率和原因有助于识别计划、库存准确性或订单管理中的上游问题。 获取方式 通过跟踪仓库订单抬头表 /SCWM/WHO 中状态字段 (STAT) 变更为“已取消”来捕获。 捕获 识别 /SCWM/WHO 中状态设置为取消状态值的时间戳。 事件类型 inferred | |||
| 包装已开始 | 代表包装活动的开始,即将拣选的物品合并并装入运输容器或处理单位(HU)。这通常是包装工作中心的第一步。 | ||
| 为何重要 标志着增值服务阶段的开始。衡量包装持续时间有助于优化工作中心布局、人员配备和物料使用。 获取方式 此事件可能需要推导得出。它可以衍生自包装站对物品或处理单位(HU)的首次扫描,通常记录在工作中心或 HU 日志中。/SCWM/PACKSPEC 等表及相关执行日志可作为数据源。 捕获 使用该交货单首次包装相关仓库任务确认的时间戳,或最终运输单元(HU)的创建时间。 事件类型 inferred | |||
| 已创建拣货任务 | 系统生成仓库任务 (WT),从货位拣取货物以履行出库交货单。这代表系统向操作员发出了检索产品的指令。 | ||
| 为何重要 出库物理流程的开始。拣货任务创建与确认之间的时间滞后,是分析拣货效率和资源可用性的关键。 获取方式 从表 /SCWM/WT 中流程类型显示为拣货的相关仓库任务的创建时间戳(字段 CREATED_AT)捕获。 捕获 筛选与该仓库订单关联且流程类型为拣货的仓库任务,并使用它们的创建时间戳。 事件类型 explicit | |||
| 收货过账完成 | 标志着来自外部供应商或生产部门的货物正式进入仓库库存。这是一项关键的财务和库存过账,使库存可见,并支持后续流程(如上架)。 | ||
| 为何重要 这是入库流程中的关键里程碑。从货物到达至此项过账之间的时间可以反映收货区的积压情况,进而影响库存可用性。 获取方式 衍生自与仓库订单关联的入库交货单据的过账情况。请检查表 /SCDL/DB_PROCH_I 中的单据流或状态字段(例如 DGRSTAT)。 捕获 识别相关入库交货的“收货过账”状态设置为“已完成”的时间戳。 事件类型 inferred | |||
| 暂存任务已确认 | 仓库操作员确认已包装的处理单位从包装站或集货区移动到指定的发货暂存区。货物现已就位,等待装载。 | ||
| 为何重要 这标志着从内部处理到出库物流的过渡。暂存环节的延迟可能导致装运月台混乱并错过承运商的取货时间。 获取方式 从具有暂存移动流程类型的仓库任务 (/SCWM/WT) 的确认时间戳(字段 CONFIRMED_AT)捕获。 捕获 识别与处理单位或交货关联的暂存仓库任务的确认时间戳。 事件类型 explicit | |||
| 装载完成 | 表示发货的所有货物已实际装载到运输单位。这是过账发货和车辆离港的前提条件。 | ||
| 为何重要 最终发货前的关键里程碑。装载完成与发货出库之间的延迟可能预示着单据或系统问题,从而延误承运商。 获取方式 衍生自相关运输单位 (TU) 或出库交货单状态变更为“装载完成”。表 /SCWM/TU 和 /SCDL/DB_PROCH_O 中的状态与之相关。 捕获 当运输单位 (TU) 或交货单状态更新以反映装载完成时,捕获该时间戳。 事件类型 inferred | |||
| 装载开始 | 此活动标志着将货物从暂存区实际装载到卡车或运输单位的开始。这通常由系统中的用户操作触发。 | ||
| 为何重要 仓库中最后一个物理步骤的开始。分析装货时长有助于优化月台门利用率和承运商周转时间。 获取方式 衍生自相关运输单位 (TU) 或出库交货单状态变更为“装载开始”。可以检查 /SCWM/TU_STATUS 表。 捕获 当运输单位 (TU) 或交货单状态更新以反映装载开始时,捕获该时间戳。 事件类型 inferred | |||
提取指南
步骤
- 前提条件:识别或创建 CDS 视图:主要数据源是仓库管理的标准 SAP S/4HANA CDS 视图。核心视图包括用于订单级事件的
I_WarehouseOrder和用于任务级事件的I_WarehouseTask。其他视图如I_OutboundDeliveryItem、I_InboundDeliveryItem和I_EWMTransportationUnit用于相关的物流事件。请确保这些视图在您的系统中已激活。 - 创建自定义 CDS 视图:为了将多个来源的数据合并为统一的事件日志格式,您必须创建一个自定义 CDS 视图。使用 Eclipse 中的 ABAP Development Tools (ADT) 创建新的数据定义。此自定义视图将使用
UNION ALL来合并来自不同源的记录,每条记录代表一个独特的业务活动。 - 定义事件日志结构:在自定义 CDS 视图中,定义构成事件日志列的字段。必须包括
WarehouseOrder、ActivityName、EventTime以及其他必要和推荐的属性。从底层标准 CDS 视图映射这些字段。 - 建模仓库订单事件:在联合查询(Union)中添加第一个
SELECT语句。从I_WarehouseOrder中选择数据,使用创建时间戳生成“仓库订单已创建”事件。添加后续的SELECT语句,通过筛选订单状态并使用相应的确认或变更时间戳,生成“仓库订单已完成”和“仓库订单已取消”事件。 - 建模仓库任务事件:从
I_WarehouseTask添加SELECT语句。通过筛选与上架相关的仓库流程类别,生成“上架任务已创建”和“上架任务已确认”事件。类似地,根据各自的流程类别并使用创建和确认时间戳,创建“拣货任务已创建”、“拣货任务已确认”和“备货任务已确认”事件。 - 建模货物移动事件:将交货相关视图与仓库任务关联以捕获货物移动。对于“收货已过账”,从
I_InboundDeliveryItem中选择并使用ActualGoodsMovementDateTime。对于“出货已过账”,使用I_OutboundDeliveryItem中的相同字段,并链接回相关的仓库订单或任务。 - 建模装载和包装事件:从
I_EWMTransportationUnit选择数据,利用其专用时间戳捕获“装载已开始”和“装载已完成”事件。对于可能较为复杂的包装环节,可以使用代理方式:从处理单位 (Handling Unit) 视图选择,将创建时间视为“包装已开始”,状态变更时间视为“包装已完成”。此步骤可能需要根据您的具体包装流程进行调整。 - 添加注解以公开 CDS 视图:在自定义 CDS 视图定义中添加注解
@OData.publish: true。这将指示 SAP 根据视图结构自动生成 OData 服务。 - 激活 CDS 视图和 OData 服务:在 ADT 中激活新的数据定义。然后,前往 SAP Gateway 枢纽系统,使用事务代码
/IWFND/MAINT_SERVICE查找并激活新生成的 OData 服务。这使得数据可以通过 REST API 终端进行访问。 - 提取数据:使用您的目标数据平台或 ETL 工具连接到已激活的 OData 服务终端。直接在 OData URI 中应用筛选,例如筛选
EventTime以限制数据范围(如?$filter=EventTime ge datetime'2023-01-01T00:00:00')。 - 为 Process Mining 进行格式化:确保提取的数据保存为扁平文件格式(如 CSV),其列标题需与 ProcessMind 要求的属性相匹配(
WarehouseOrder、ActivityName、EventTime等)。最后将文件上传至流程挖掘工具。
配置
- Custom CDS View:必须创建一个专用的 CDS 视图(例如
Z_C_EWM_EVENTLOG_CDS)来统一事件数据。这是数据提取的核心对象。 - OData Service:必须激活从自定义 CDS 视图生成的 OData 服务。服务名称通常为 CDS 视图名称加
_CDS后缀。 - 日期范围筛选:在调用 OData API 时,对
EventTime字段应用日期筛选至关重要。初次分析的典型范围是 3 到 6 个月的数据。如果不进行筛选,查询可能会超时或导致性能问题。 - 实体筛选:为了进一步缩小数据范围,可以考虑对仓库编号(
Warehouse)、仓库订单类型(WarehouseOrderType)或特定物料(MaterialNumber)等属性应用筛选。 - 系统权限:创建 CDS 视图的用户需要在 ADT 中拥有 SAP 开发者权限。调用 OData API 的用户或服务账户需要拥有访问底层仓库管理数据的授权。
a 查询示例 sql
DEFINE VIEW Z_C_EWM_EVENTLOG_CDS
WITH PARAMETERS
P_StartDate : abap.dats,
P_EndDate : abap.dats
AS SELECT FROM I_WarehouseOrder AS WO
{
-- Required Attributes
WO.WarehouseOrder AS WarehouseOrder,
CAST('Warehouse Order Created' AS abap.char(40)) AS ActivityName,
WO.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
-- Recommended Attributes
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.CreationUser AS User,
WO.WarehouseOrderType AS WarehouseOrderType,
WO.WarehouseOrderStatus AS WarehouseOrderStatus,
WO.Priority AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
CAST(WO.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Completed' AS abap.char(40)) AS ActivityName,
WO.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.ConfirmationUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'C' AND
CAST(WO.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Canceled' AS abap.char(40)) AS ActivityName,
WO.LastChangeDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.LastChangeUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'X' AND
CAST(WO.LastChangeDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_InboundDeliveryItem AS IBD ON WT.DeliveryDocument = IBD.InboundDelivery AND WT.DeliveryDocumentItem = IBD.InboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Receipt Posted' AS abap.char(40)) AS ActivityName,
IBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
IBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
IBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(IBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Started' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Completed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Staging Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '4' AND -- Staging
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Started' AS abap.char(40)) AS ActivityName,
TU.LoadingStartDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
TU.LoadingEndDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingStartDateTime IS NOT NULL AND
CAST(TU.LoadingStartDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Completed' AS abap.char(40)) AS ActivityName,
TU.LoadingEndDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingEndDateTime IS NOT NULL AND
TU.LoadingStatus = 'C' AND
CAST(TU.LoadingEndDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_OutboundDeliveryItem AS OBD ON WT.DeliveryDocument = OBD.OutboundDelivery AND WT.DeliveryDocumentItem = OBD.OutboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Issue Posted' AS abap.char(40)) AS ActivityName,
OBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
OBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
OBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(OBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate 步骤
- 前提条件:识别或创建 CDS 视图:主要数据源是仓库管理的标准 SAP S/4HANA CDS 视图。核心视图包括用于订单级事件的
I_WarehouseOrder和用于任务级事件的I_WarehouseTask。其他视图如I_OutboundDeliveryItem、I_InboundDeliveryItem和I_EWMTransportationUnit用于相关的物流事件。请确保这些视图在您的系统中已激活。 - 创建自定义 CDS 视图:为了将多个来源的数据合并为统一的事件日志格式,您必须创建一个自定义 CDS 视图。使用 Eclipse 中的 ABAP Development Tools (ADT) 创建新的数据定义。此自定义视图将使用
UNION ALL来合并来自不同源的记录,每条记录代表一个独特的业务活动。 - 定义事件日志结构:在自定义 CDS 视图中,定义构成事件日志列的字段。必须包括
WarehouseOrder、ActivityName、EventTime以及其他必要和推荐的属性。从底层标准 CDS 视图映射这些字段。 - 建模仓库订单事件:在联合查询(Union)中添加第一个
SELECT语句。从I_WarehouseOrder中选择数据,使用创建时间戳生成“仓库订单已创建”事件。添加后续的SELECT语句,通过筛选订单状态并使用相应的确认或变更时间戳,生成“仓库订单已完成”和“仓库订单已取消”事件。 - 建模仓库任务事件:从
I_WarehouseTask添加SELECT语句。通过筛选与上架相关的仓库流程类别,生成“上架任务已创建”和“上架任务已确认”事件。类似地,根据各自的流程类别并使用创建和确认时间戳,创建“拣货任务已创建”、“拣货任务已确认”和“备货任务已确认”事件。 - 建模货物移动事件:将交货相关视图与仓库任务关联以捕获货物移动。对于“收货已过账”,从
I_InboundDeliveryItem中选择并使用ActualGoodsMovementDateTime。对于“出货已过账”,使用I_OutboundDeliveryItem中的相同字段,并链接回相关的仓库订单或任务。 - 建模装载和包装事件:从
I_EWMTransportationUnit选择数据,利用其专用时间戳捕获“装载已开始”和“装载已完成”事件。对于可能较为复杂的包装环节,可以使用代理方式:从处理单位 (Handling Unit) 视图选择,将创建时间视为“包装已开始”,状态变更时间视为“包装已完成”。此步骤可能需要根据您的具体包装流程进行调整。 - 添加注解以公开 CDS 视图:在自定义 CDS 视图定义中添加注解
@OData.publish: true。这将指示 SAP 根据视图结构自动生成 OData 服务。 - 激活 CDS 视图和 OData 服务:在 ADT 中激活新的数据定义。然后,前往 SAP Gateway 枢纽系统,使用事务代码
/IWFND/MAINT_SERVICE查找并激活新生成的 OData 服务。这使得数据可以通过 REST API 终端进行访问。 - 提取数据:使用您的目标数据平台或 ETL 工具连接到已激活的 OData 服务终端。直接在 OData URI 中应用筛选,例如筛选
EventTime以限制数据范围(如?$filter=EventTime ge datetime'2023-01-01T00:00:00')。 - 为 Process Mining 进行格式化:确保提取的数据保存为扁平文件格式(如 CSV),其列标题需与 ProcessMind 要求的属性相匹配(
WarehouseOrder、ActivityName、EventTime等)。最后将文件上传至流程挖掘工具。
配置
- Custom CDS View:必须创建一个专用的 CDS 视图(例如
Z_C_EWM_EVENTLOG_CDS)来统一事件数据。这是数据提取的核心对象。 - OData Service:必须激活从自定义 CDS 视图生成的 OData 服务。服务名称通常为 CDS 视图名称加
_CDS后缀。 - 日期范围筛选:在调用 OData API 时,对
EventTime字段应用日期筛选至关重要。初次分析的典型范围是 3 到 6 个月的数据。如果不进行筛选,查询可能会超时或导致性能问题。 - 实体筛选:为了进一步缩小数据范围,可以考虑对仓库编号(
Warehouse)、仓库订单类型(WarehouseOrderType)或特定物料(MaterialNumber)等属性应用筛选。 - 系统权限:创建 CDS 视图的用户需要在 ADT 中拥有 SAP 开发者权限。调用 OData API 的用户或服务账户需要拥有访问底层仓库管理数据的授权。
a 查询示例 sql
DEFINE VIEW Z_C_EWM_EVENTLOG_CDS
WITH PARAMETERS
P_StartDate : abap.dats,
P_EndDate : abap.dats
AS SELECT FROM I_WarehouseOrder AS WO
{
-- Required Attributes
WO.WarehouseOrder AS WarehouseOrder,
CAST('Warehouse Order Created' AS abap.char(40)) AS ActivityName,
WO.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
-- Recommended Attributes
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.CreationUser AS User,
WO.WarehouseOrderType AS WarehouseOrderType,
WO.WarehouseOrderStatus AS WarehouseOrderStatus,
WO.Priority AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
CAST(WO.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Completed' AS abap.char(40)) AS ActivityName,
WO.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.ConfirmationUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'C' AND
CAST(WO.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Canceled' AS abap.char(40)) AS ActivityName,
WO.LastChangeDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.LastChangeUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'X' AND
CAST(WO.LastChangeDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_InboundDeliveryItem AS IBD ON WT.DeliveryDocument = IBD.InboundDelivery AND WT.DeliveryDocumentItem = IBD.InboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Receipt Posted' AS abap.char(40)) AS ActivityName,
IBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
IBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
IBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(IBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Started' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Completed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Staging Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '4' AND -- Staging
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Started' AS abap.char(40)) AS ActivityName,
TU.LoadingStartDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
TU.LoadingEndDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingStartDateTime IS NOT NULL AND
CAST(TU.LoadingStartDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Completed' AS abap.char(40)) AS ActivityName,
TU.LoadingEndDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingEndDateTime IS NOT NULL AND
TU.LoadingStatus = 'C' AND
CAST(TU.LoadingEndDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_OutboundDeliveryItem AS OBD ON WT.DeliveryDocument = OBD.OutboundDelivery AND WT.DeliveryDocumentItem = OBD.OutboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Issue Posted' AS abap.char(40)) AS ActivityName,
OBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
OBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
OBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(OBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate