您的仓库管理数据模板
您的仓库管理数据模板
- 全面分析所需的推荐属性
- 需要在整个流程中跟踪的关键活动
- 从SAP EWM提取数据的指导
仓库管理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 仓库订单 WarehouseOrder | 仓库订单的唯一标识,用于归并由某项资源执行的一组仓库任务。 | ||
| 说明 Warehouse Order是跟踪仓库内货物处理端到端流程的主要案例标识。它代表一个工作包,例如为出库交付拣选物品,或将收货货物上架。每个Warehouse Order包含一个或多个仓库任务。 在流程挖掘中,按Warehouse Order分析可以全面查看特定工作包的完整生命周期。这有助于识别瓶颈,衡量从创建到完成的整体周期时间,并了解单条物流指令关联的完整活动流。 为什么重要 这是连接所有相关仓库活动的核心标识,可支持单个工作单元的端到端流程分析和周期时间测量。 获取位置 此标识通常位于SAP EWM仓库订单抬头表中,例如/SCWM/WHO。 示例 200000145200000146200000147 | |||
| 最后数据更新时间 LastDataUpdate | 表示该记录数据最近一次从源系统刷新时间的时间戳。 | ||
| 说明 此属性记录数据最近一次从源系统提取的时间,为所分析数据的新鲜度提供重要背景。 在任何分析或仪表板中,了解数据的时效性对于做出有依据的决策都至关重要。此时间戳有助于判断当前查看的是实时信息,还是某个时间点的快照,从而合理预期数据的时效。 为什么重要 表示数据的新鲜度,有助于用户了解当前流程分析反映的最新程度。 获取位置 这是通常在数据提取(ETL)过程中生成并添加的元数据字段,反映数据加载时间戳。 示例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| 开始时间 EventTime | 表示活动或事件开始时间的时间戳。 | ||
| 说明 此属性记录具体仓库活动发生的准确日期和时间,是事件排序及计算事件间时长的主要时间要素。 在流程挖掘中,Start Time对于构建每个案例的事件时间顺序至关重要。它用于计算周期时间、等待时间和处理时间,是绩效分析、瓶颈识别和SLA监控的重要依据。 为什么重要 此时间戳对于按时间顺序排列事件,以及计算周期时间和时长等所有基于时间的绩效指标至关重要。 获取位置 通常位于/SCWM/ORDIM_C等事件或确认表中,例如字段CONF_TIMESTAMP,或位于与仓库订单和任务关联的状态变更日志中。 示例 2023-10-26T10:00:00Z2023-10-26T10:15:30Z2023-10-26T11:20:00Z | |||
| 活动名称 ActivityName | 已发生的具体仓库管理活动或事件名称,例如“Picking Task Created”或“Goods Issue Posted”。 | ||
| 说明 此属性描述仓库管理流程中的单个步骤或事件。这些活动是流程图的基本组成部分,代表创建、确认、包装、装载和货物移动等任务。 分析这些活动的顺序和频率是流程挖掘的基础。它有助于直观呈现流程顺序,识别常见和罕见路径,发现偏离标准过程的情况,并定位导致延迟或返工的具体步骤。 为什么重要 它定义流程中的步骤,构成流程图的基础,并支持对流程顺序、偏差和瓶颈进行分析。 获取位置 根据与仓库订单和任务相关的状态变更、事件消息或交易日志得出,数据来源可以是/SCWM/ORDIM_C(确认)等表,也可以通过解读/SCWM/WHO和/SCWM/ORDIM_O中的状态字段获得。 示例 已确认拣选任务已创建上架任务已过账收货Warehouse Order已完成 | |||
| 源系统 SourceSystem | 标识数据提取来源系统,例如SAP EWM生产实例。 | ||
| 说明 此属性指定仓库管理数据来源的记录系统。在包含多个系统的企业环境中,标记数据来源对于追溯和理解数据背景至关重要。 在分析中,它有助于区分跨多个系统的流程,或比较不同实例中的流程,例如不同区域使用的独立系统,从而确保数据血缘清晰且可审计。 为什么重要 提供可追溯性和背景信息,尤其适用于包含多个SAP实例或集成系统的环境,确保数据血缘清晰。 获取位置 这通常是在数据提取、转换和加载(ETL)过程中添加的静态值,用于标识具体的SAP S/4HANA或EWM实例。 示例 SAP_EWM_PROD_EUS4H_US_100EWM_APAC_PRD | |||
| Warehouse Order状态 WarehouseOrderStatus | Warehouse Order的当前或最终状态,例如“Completed”或“Canceled”。 | ||
| 说明 此属性表示Warehouse Order的最终结果。了解订单是成功完成还是被取消,对于分析流程成功率和识别未完成原因至关重要。 这是许多分析的重要筛选条件。例如,计算端到端仓库周期时间时,通常只分析已完成订单。它也有助于识别和调查订单取消的频率及原因。 为什么重要 表示案例结果,支持筛选已完成和已取消订单,对于准确分析周期时间和吞吐量至关重要。 获取位置 状态字段通常位于仓库订单抬头表/SCWM/WHO中。 示例 已完成处理中已取消 | |||
| Warehouse Order类型 WarehouseOrderType | 按用途对Warehouse Order进行分类,例如上架、拣选或内部补货。 | ||
| 说明 Warehouse Order类型根据订单承担的物流职能对其分类。这一区分非常重要,因为不同类型的订单遵循不同的流程路径,绩效要求也不同。 在分析中,此属性是主要的筛选和比较维度。例如,“Warehouse Order Throughput & Volume”仪表板依靠它区分入库(上架)和出库(拣选)流程,从而更准确地呈现仓库运营情况。 为什么重要 支持按流程类别细分分析,例如区分入库和出库,从而实现更有针对性的比较并获得更相关的洞察。 获取位置 该类型由仓库流程类型确定,通常位于仓库订单抬头表/SCWM/WHO中。 示例 PICKPUTWREPLSTGE | |||
| 优先级 Priority | 分配给仓库订单的优先级,用于表示其紧急程度,例如高、中、低。 | ||
| 说明 此属性根据业务重要性或紧急程度对仓库订单进行分类。例如,高优先级订单可能涉及快递发运或关键生产供应,需要优先处理。 优先级是“优先级订单履约遵循度”仪表板和KPI的重要维度。通过筛选和分组绩效数据,可以确保最关键的订单在预期时限内完成,使仓库运营与业务目标保持一致。 为什么重要 支持按优先级开展分析和监控,确保高紧急度订单达到服务水平,直接影响客户满意度。 获取位置 优先级可以在基础交付单据上设置,并传输至仓库订单。相关信息可能位于/SCWM/WHO等表中。 示例 高中低 | |||
| 物料编号 MaterialNumber | 仓库任务中所处理产品或物料的唯一标识。 | ||
| 说明 此属性指定正在移动、拣选、包装或接收的物料,是根据产品特征细分和分析仓库绩效的重要维度。 按物料编号分析,可以回答哪些产品上架时间最长、哪些产品最常涉及拣选错误、哪些产品需要质量检验等问题。这对于“Goods Receipt & Putaway Performance”和“Quality Inspection Lead Time”仪表板至关重要。 为什么重要 支持按产品筛选和细分流程数据,对于识别处理、存储或质量控制中的产品特定问题至关重要。 获取位置 此信息通常位于/SCWM/ORDIM_O等仓库任务表中,并与物料主数据关联。 示例 FIN-1001RAW-2050SFIN-300-A | |||
| 用户ID User | 确认或执行该活动的仓库操作员或用户标识。 | ||
| 说明 此属性记录负责执行仓库任务人员的用户ID。该人员可能是确认拣选的拣选员、包装工位的包装员,或确认上架的叉车操作员。 这类数据是“Resource & Equipment Utilization”仪表板的重要依据。它支持分析个人或团队绩效,识别培训需求,并更有效地平衡仓库员工的工作量。 为什么重要 将工作归属到具体人员,支持按用户或团队分析绩效,并帮助进行资源管理和工作量平衡。 获取位置 通常位于仓库任务的确认数据中,例如/SCWM/ORDIM_C表的字段UNAME。 示例 JSMITHARODRIGUEZOPERATOR_05 | |||
| 结束时间 EventEndTime | 表示活动或事件完成时间的时间戳。 | ||
| 说明 此属性记录具体仓库活动完成的日期和时间。对于原子事件,它通常与Start Time相同;对于包装或装载等具有可测量时长的活动,则可能不同。 单独记录End Time可以精确计算各项活动的处理时间。这对于分析具体步骤时长的绩效仪表板至关重要,例如“Picking & Packing Efficiency”,有助于识别最耗时的任务。 为什么重要 支持精确计算单项活动的持续时间,是识别耗时步骤和资源密集型任务的关键。 获取位置 对于离散事件,它通常与开始时间戳相同。对于长时间运行的任务,它可能是/SCWM/ORDIM_C等表中的独立字段,也可能根据后续状态变更推导得出。 示例 2023-10-26T10:05:00Z2023-10-26T10:25:45Z2023-10-26T11:20:00Z | |||
| 仓库任务 WarehouseTask | 单个仓库任务的唯一标识。仓库任务是Warehouse Order的组成部分。 | ||
| 说明 仓库任务是执行具体货物移动的指令,例如将产品从存储库位移至包装工位。一个Warehouse Order可以归并一个或多个此类任务。 在任务层级进行分析,可以更细致地了解仓库运营。它有助于评估特定移动的资源绩效,识别难以到达的存储库位,或分析单项拣选和上架活动的效率。 为什么重要 提供细粒度的分析详情,可检查大型Warehouse Order中的单项移动和步骤。 获取位置 位于/SCWM/ORDIM_O(任务数据)和/SCWM/ORDIM_C(确认数据)等仓库任务表中。 示例 300000451300000452300000453 | |||
| 使用的设备 EquipmentUsed | 执行仓库任务时使用的设备标识,例如叉车或托盘搬运车。 | ||
| 说明 此属性用于指定分配给仓库任务或执行该任务的物料搬运设备。设备可以是特定叉车、自动导引车(AGV)或某种类型的推车。 这些数据是“资源与设备利用率”仪表板和“设备利用率”KPI的基础。通过跟踪不同设备执行的任务及其使用时长,管理人员可以分析利用模式、安排维护,并据此决定车队规模和构成。 为什么重要 支持分析设备利用率和效率,帮助优化车队管理并识别资源限制。 获取位置 如果已在SAP EWM中配置资源管理,此信息可能存储在仓库任务或订单明细中。请参阅SAP Extended Warehouse Management文档。 示例 FORKLIFT-07AGV-02CART-15 | |||
| 存储位置 StorageLocation | 仓库内货物移入或移出的具体位置,例如存储库位。 | ||
| 说明 此属性用于标识仓库任务涉及的实际位置,例如拣选的源库位或上架的目标库位。范围可以从较大的区域到具体的货架坐标。 按存储位置分析可以发现运营洞察,例如识别拣选率较高的“黄金区域”,或经常发生延迟和错误的问题区域。还可用于“拣选路线遵循度”分析,了解拣选人员在仓库中的移动路径。 为什么重要 提供仓库内的地理位置信息,支持分析移动效率、库位可达性和拣选路线优化。 获取位置 通常位于/SCWM/ORDIM_O等仓库任务表中,其中包含源库位(VLPLA)和目标库位(NLPLA)信息。 示例 01-02-03PACK-STATION-01GI-ZONE-A | |||
| 实际数量 ActualQuantity | 用户为仓库任务确认的物料实际数量。 | ||
| 说明 此属性表示仓库操作员实际处理并确认的数量,可以是从库位拣出的数量、上架数量,或收货时清点的数量。 将实际数量与计划数量进行比较,是“Inventory Discrepancy Analysis”的基础。两者之间的差异会直接显示需要调查的流程异常,也是衡量运营准确率以及计算“Inventory Accuracy Rate”和“Picking Error Rate”KPI的重要输入。 为什么重要 这是实际处理数量的真实依据。将其与计划数量比较,可以直接衡量运营准确率并识别错误。 获取位置 位于仓库任务确认数据中,例如/SCWM/ORDIM_C表,通常对应NDIFF(差异数量)等字段,或根据确认数量推导得出。 示例 10049250 | |||
| 数量差异 QuantityVariance | 任务计划数量与实际确认数量之间的差值。 | ||
| 说明 此计算指标用于量化仓库任务执行过程中发现的差异。非零值表示实际情况与系统记录不一致,可能意味着拣选错误、收货错误或物料损坏。 此属性直接支持“库存差异分析”仪表板,可突出显示错误规模。分析差异出现的频率和幅度,有助于定位库存管理和运营执行中的系统性问题,并指导准确性改进。 为什么重要 直接量化库存和运营不准确情况,便于快速发现并分析差异规模。 获取位置 对每个相关任务,用ActualQuantity减去PlannedQuantity计算得出。 示例 0-15 | |||
| 是否按时 IsOnTime | 用于表示仓库订单是否在要求完成日期前完成的布尔标记。 | ||
| 说明 此标记以简单的二元结果表示SLA达成情况,用于判断仓库订单的最终完成事件是否发生在指定的Requested Completion Date当天或之前。 此属性是“优先级订单履约遵循度”仪表板的基础。通过统计和筛选按时订单与延迟订单,可以简化KPI和可视化内容的创建,无需在分析层执行复杂的日期计算,即可快速评估绩效是否达到服务水平目标。 为什么重要 通过提供清晰的二元指标,简化SLA绩效分析,明确每个订单是按时履约还是延迟履约。 获取位置 这是一个计算属性。其逻辑将“仓库订单已完成”活动的时间戳与“RequestedCompletionDate”属性进行比较。 示例 truefalse | |||
| 端到端周期时间 EndToEndCycleTime | 从创建仓库订单到最终完成所经过的总时间。 | ||
| 说明 此KPI衡量仓库订单整个生命周期的持续时间,是反映仓库运营整体效率和处理速度的重要高层指标。 该指标是“端到端仓库周期时间”仪表板的核心。持续跟踪KPI,并按订单类型或物料等维度进行细分,有助于识别系统性低效,并衡量流程改进措施对整体运营的影响。 为什么重要 这是衡量仓库流程整体效率的主要KPI,可从高层视角反映运营绩效。 获取位置 在案例层级计算:用最后一个事件(“仓库订单已完成”)的时间戳减去第一个事件(“仓库订单已创建”)的时间戳。 示例 8640017280043200 | |||
| 要求完成日期 RequestedCompletionDate | 高优先级仓库订单要求完成的日期。 | ||
| 说明 此属性定义仓库订单的服务水平协议(SLA)或目标完成日期。系统以此截止时间衡量实际完成时间,判断订单是否按时完成。 该日期对于计算“优先级订单履约率”KPI至关重要。将实际完成时间戳与要求完成日期进行比较,可以量化服务水平达成情况,并突出显示可能逾期或已经延迟的订单。 为什么重要 定义订单的SLA,是衡量按时履约绩效的基准,尤其适用于高优先级项目。 获取位置 此日期通常源自触发仓库订单的出库交付订单中的计划发货日期或交付日期。请参阅SAP Extended Warehouse Management文档。 示例 2023-10-27T17:00:00Z2023-10-28T12:00:00Z | |||
| 计划出库时间 PlannedDepartureTime | 计划发运从仓库出库的时间。 | ||
| 说明 此属性表示完成拣选、包装和装载后发运货物的目标时间,是衡量出库流程最后阶段按时完成情况的基准。 该时间戳是“发运按时出库绩效”仪表板的关键数据。将实际出库时间与计划时间进行比较,可以识别装载、承运商协调或单据处理方面的延迟,为物流和运输计划效率提供洞察。 为什么重要 为衡量按时出库绩效提供基准,这对物流计划和满足承运商时刻安排至关重要。 获取位置 此信息通常属于与仓库订单关联的运输或发运单据。请参阅SAP Extended Warehouse Management文档。 示例 2023-10-27T18:00:00Z2023-10-28T14:00:00Z | |||
| 计划数量 PlannedQuantity | 给定仓库任务中某项物料的预期数量。 | ||
| 说明 此属性表示根据仓库任务指令应移动、拣选或接收的物料目标数量,是与实际执行数量进行比较的基准。 计划数量是“Inventory Discrepancy Analysis”仪表板和“Inventory Accuracy Rate”KPI的重要依据。将其与实际数量进行比较,可以识别库存差异,这些差异可能源于拣选错误、收货错误或数据录入问题,从而帮助提升库存准确率。 为什么重要 作为计算库存准确率和识别差异的基准,对于维持准确库存水平至关重要。 获取位置 位于仓库任务数据中,例如/SCWM/ORDIM_O表,通常对应NISTA(目标数量)等字段。 示例 10050250 | |||
仓库管理活动
| 活动 | 说明 | ||
|---|---|---|---|
| Warehouse Order已创建 | 此活动标志着Warehouse Order(WO)的创建。Warehouse Order是由多个仓库任务组成的工作包。系统会根据作业区域、队列或产品等条件生成WO,用于为仓库员工归并和组织工作。 | ||
| 为什么重要 这是仓库执行流程的主要开始事件。分析从创建到首次操作所需的时间,有助于识别工作分配和资源配置中的延误。 获取位置 此事件取自Warehouse Order抬头表/SCWM/WHO中的创建时间戳字段CREATED_AT。 采集 从/SCWM/WHO表提取每个Warehouse Order编号(WHO)的创建时间戳。 事件类型 explicit | |||
| Warehouse Order已完成 | 所有关联仓库任务完成确认后,Warehouse Order状态会设置为“Completed”。从执行角度看,这标志着工作包已关闭。 | ||
| 为什么重要 这是流程成功完成的主要结束事件,对于计算端到端仓库周期时间和衡量整体吞吐量至关重要。 获取位置 通过跟踪Warehouse Order抬头表/SCWM/WHO中状态字段STAT变为“Completed”来记录。也可以使用该表的变更日志DBTABLOG或专用时间戳字段。 采集 确定/SCWM/WHO中的状态设置为“C”(Completed)时的时间戳。 事件类型 inferred | |||
| 包装已完成 | 此活动表示某批货运的所有物品均已装入Handling Unit,该单元已关闭并贴标。包装完成的货物可进入下一阶段,例如集货或装载。 | ||
| 为什么重要 此里程碑结束包装阶段,也是集货和发运的前提。因此,此处的任何延误都会直接影响整体交付周期以及Packing and Staging Lead Time KPI。 获取位置 当Handling Unit(HU)状态设置为“Closed”,或WO的最后一个包装相关仓库任务完成确认时,可以记录此事件。/SCWM/HUHDR表包含HU状态信息。 采集 确定与订单关联的最终发运Handling Unit关闭或完成时的时间戳。 事件类型 inferred | |||
| 已确认上架任务 | 仓库操作员确认上架Warehouse Task已完成,即货物已实际放入指定存储库位。该确认会实时更新库存位置。 | ||
| 为什么重要 此活动是入库处理的关键里程碑,确认库存已可供拣选。此处的延误会直接影响Goods Receipt to Putaway Cycle Time KPI。 获取位置 取自Warehouse Task表/SCWM/WT中的确认时间戳字段CONFIRMED_AT。任务状态STAT也会变为“Confirmed”。 采集 使用/SCWM/WT表中与Warehouse Order关联的上架任务确认时间戳。 事件类型 explicit | |||
| 已确认拣选任务 | 仓库操作员确认拣选Warehouse Task已完成,表示货物已从存储位置实际取出。通常通过RF扫描器完成确认。 | ||
| 为什么重要 这是订单履约的关键里程碑,会直接影响从订单到发运的周期时间。分析此活动有助于衡量拣选员生产率并识别拣选瓶颈。 获取位置 取自Warehouse Task表/SCWM/WT中的确认时间戳字段CONFIRMED_AT。任务状态STAT会更新为“Confirmed”。 采集 使用/SCWM/WT表中与Warehouse Order关联的拣选任务确认时间戳。 事件类型 explicit | |||
| 已过账发货 | 这是系统中最终的物流和财务步骤,正式将货物从仓库库存中扣除。它表示货物所有权已转移,货运已正式离开仓库。 | ||
| 为什么重要 这是出库流程的关键终点,会触发开票和库存更新,也是衡量按时发运及Shipment Loading & Dispatch Time KPI的重要环节。 获取位置 根据与Warehouse Order关联的Outbound Delivery单据过账推断。请检查/SCDL/DB_PROCH_O表中的单据流或状态字段,例如DGI_STAT。 采集 确定关联Outbound Delivery的Goods Issue状态设置为“Completed”时的时间戳。 事件类型 explicit | |||
| Warehouse Order已取消 | Warehouse Order在所有任务完成前被取消,后续执行随之停止。原因可能包括库存不可用、客户订单变更或其他异常。 | ||
| 为什么重要 这代表失败或异常路径。分析取消频率及原因,有助于识别计划、库存准确率或订单管理中的上游问题。 获取位置 通过跟踪Warehouse Order抬头表/SCWM/WHO中状态字段STAT变为“Canceled”来记录。 采集 确定/SCWM/WHO中的状态设置为取消状态值时的时间戳。 事件类型 inferred | |||
| 已创建上架任务 | 系统会生成一项具体指令,即Warehouse Task(WT),将已收货物从收货区域移至最终存储库位。此活动表示系统已准备好执行上架移动。 | ||
| 为什么重要 跟踪任务创建到确认之间的时间,可以了解仓库操作员接收并执行上架指令所需的时长,从而发现潜在的人员或设备短缺。 获取位置 取自/SCWM/WT表中相关Warehouse Task的创建时间戳字段CREATED_AT,其中流程类型表示上架。 采集 筛选与Warehouse Order关联且流程类型为上架的Warehouse Task,并使用其创建时间戳。 事件类型 explicit | |||
| 已创建拣选任务 | 系统会生成Warehouse Task(WT),将货物从存储库位拣出,以履行出库交付订单。这代表系统向操作员发出的取货指令。 | ||
| 为什么重要 这是出库实物流转的起点。拣选任务从创建到确认之间的时间差,对于分析拣选效率和资源可用性至关重要。 获取位置 取自/SCWM/WT表中相关Warehouse Task的创建时间戳字段CREATED_AT,其中流程类型表示拣选。 采集 筛选与Warehouse Order关联且流程类型为拣选的Warehouse Task,并使用其创建时间戳。 事件类型 explicit | |||
| 已完成装载 | 表示某批货运的所有货物均已实际装载到运输单元上。这是过账发货和车辆出发的前提。 | ||
| 为什么重要 这是最终发运前的关键里程碑。装载完成到发货过账之间的延误,可能表明单据或系统问题正在阻碍承运商作业。 获取位置 根据关联Transportation Unit(TU)或Outbound Delivery Order状态变为“Loading Completed”推断。/SCWM/TU和/SCDL/DB_PROCH_O表中的状态字段均相关。 采集 记录TU或Delivery Order状态更新为装载完成时的时间戳。 事件类型 inferred | |||
| 已开始包装 | 表示包装作业开始,已拣选物品被汇总并放入运输容器或Handling Unit中。这通常是包装工作中心的第一步。 | ||
| 为什么重要 标志着增值服务阶段开始。测量包装时长有助于优化工作中心布局、人员配置和物料。 获取位置 此事件可能需要推断。可以根据物品或Handling Unit在包装工位的首次扫描记录得出,相关记录通常保存在工作中心或Handling Unit日志中。/SCWM/PACKSPEC及相关执行日志可作为数据来源。 采集 使用该交付单首个与包装相关的Warehouse Task确认时间戳,或使用最终发运HU的创建时间。 事件类型 inferred | |||
| 已开始装载 | 此活动标志着将货物从集货区实际装载到卡车或运输单元的开始,通常由系统中的用户操作触发。 | ||
| 为什么重要 这是仓库最后一个实物流转步骤的起点。分析装载时长有助于优化月台门使用率和承运商周转时间。 获取位置 根据关联Transportation Unit(TU)或Outbound Delivery Order状态变为“Loading Started”推断。可检查/SCWM/TU_STATUS表。 采集 记录TU或Delivery Order状态更新为装载开始时的时间戳。 事件类型 inferred | |||
| 已确认集货任务 | 仓库操作员确认将已包装的Handling Unit从包装工位或集货区域移至指定的发运集货区。此时货物已就位,可进行装载。 | ||
| 为什么重要 这标志着流程从内部处理转入出库物流。集货延误可能导致装卸月台混乱,并错过承运商提货时间。 获取位置 取自Warehouse Task(/SCWM/WT)中流程类型为集货移动的任务确认时间戳字段CONFIRMED_AT。 采集 确定与Handling Unit或交付单关联的集货仓库任务确认时间戳。 事件类型 explicit | |||
| 已过账收货 | 标志着外部供应商或生产环节的货物正式进入仓库库存。这是一项关键的财务和库存过账,使库存可见并可供后续上架等流程使用。 | ||
| 为什么重要 这是入库流程中的关键里程碑。货物到达与完成该过账之间的时间,可以反映收货区域的积压情况,并影响库存可用性。 获取位置 根据与Warehouse Order关联的Inbound Delivery单据过账推断。请检查/ SCDL/DB_PROCH_I表中的单据流或状态字段,例如DGRSTAT。 采集 确定关联Inbound Delivery的Goods Receipt状态设置为“Completed”时的时间戳。 事件类型 inferred | |||
提取指南
步骤
- 前提:识别或创建CDS视图:主要数据源是用于仓库管理的标准SAP S/4HANA CDS视图。关键视图包括用于订单级事件的
I_WarehouseOrder和用于任务级事件的I_WarehouseTask。对于相关物流事件,还需要I_OutboundDeliveryItem、I_InboundDeliveryItem和I_EWMTransportationUnit等视图。请确保这些视图已在系统中启用。 - 创建自定义CDS视图:要将多个数据源合并为统一的事件日志格式,必须创建自定义CDS视图。在Eclipse中使用ABAP Development Tools(ADT)创建新的Data Definition。该自定义视图将使用
UNION ALL合并不同来源的记录,每条记录代表一项独立的业务活动。 - 定义事件日志结构:在自定义CDS视图中,定义构成事件日志列的字段。必须包括
WarehouseOrder、ActivityName、EventTime以及其他必需和推荐属性,并将这些字段映射到基础标准CDS视图。 - 建立仓库订单事件模型:在UNION中添加第一组
SELECT语句。从I_WarehouseOrder中选择数据,使用创建时间戳生成“仓库订单已创建”事件。随后根据订单状态筛选数据,并使用相应的确认时间戳或变更时间戳,生成“仓库订单已完成”和“仓库订单已取消”事件。 - 建立仓库任务事件模型:从
I_WarehouseTask中添加SELECT语句。筛选与上架相关的仓库流程类别,生成“上架任务已创建”和“上架任务已确认”事件。同样,根据相应流程类别,使用创建时间戳和确认时间戳生成“拣选任务已创建”“拣选任务已确认”和“集货任务已确认”事件。 - 建立货物移动事件模型:将交付相关视图与仓库任务连接,以捕获货物移动。对于“收货过账”,从
I_InboundDeliveryItem中选择数据,并使用ActualGoodsMovementDateTime。对于“发货过账”,使用I_OutboundDeliveryItem中的同一字段,并关联回相关仓库订单或任务。 - 建立装载和包装事件模型:从
I_EWMTransportationUnit中选择数据,使用其专用时间戳捕获“开始装载”和“装载完成”事件。包装流程可能较为复杂,可通过Handling Unit视图进行近似:使用创建时间表示“开始包装”,使用状态变更时间表示“包装完成”。具体步骤可能需要根据您的包装流程调整。 - 添加注释以公开CDS视图:在自定义CDS视图定义中添加注释
@OData.publish: true。该注释会指示SAP根据视图结构自动生成OData服务。 - 激活CDS视图和OData服务:在ADT中激活新的Data Definition。然后进入SAP Gateway中心系统,使用事务
/IWFND/MAINT_SERVICE查找并激活新生成的OData服务,使数据可通过REST API端点访问。 - 提取数据:使用目标数据平台或ETL工具连接到已激活的OData服务端点。直接在OData URI中应用筛选条件,例如按
EventTime筛选以限制数据范围(如?$filter=EventTime ge datetime'2023-01-01T00:00:00')。 - 整理为流程挖掘格式:确保将提取的数据保存为CSV等平面文件格式,并使列标题与ProcessMind所需属性(
WarehouseOrder、ActivityName、EventTime等)一致。将最终文件上传到流程挖掘工具。
配置
- 自定义CDS视图:必须创建专用CDS视图,例如
Z_C_EWM_EVENTLOG_CDS,用于统一事件数据。这是数据提取的核心对象。 - OData服务:必须激活由自定义CDS视图生成的OData服务。服务名称通常为CDS视图名称加上
_CDS后缀。 - 日期范围筛选:调用OData API时,必须对
EventTime字段应用日期筛选。初始分析通常可使用3到6个月的数据。没有筛选条件时,查询可能超时或引发性能问题。 - 实体筛选:为进一步缩小数据范围,可以根据仓库编号(
仓库)、仓库订单类型(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 步骤
- 确认已批准直接读取SAP EWM数据库架构,并确定代表仓库订单抬头、仓库任务、仓库订单状态历史、收货和发货过账、包装、暂存及装载的物理数据库对象。/SCWM/WHO和/SCWM/WT通常可作为起点,但请在您的系统中验证实际对象、字段、状态代码、时间戳含义和数据库架构。
- 从SAP EWM技术负责人或数据字典获取经过验证的字段映射。映射仓库订单ID、仓库订单类型、状态、优先级、仓库任务ID、任务类别或流程类型、物料、用户、创建时间戳、确认时间戳、包装时间戳、暂存时间戳、装载时间戳、收货时间戳、发货时间戳、源系统和最后刷新时间戳。不要假定字段位于同一张表中,也不要假定不同部署中的状态代码含义相同。
- 使用只读数据库账户、生产或报表架构,以及提取开始日期、提取结束日期、源系统名称和公司特定筛选条件的参数化值配置提取连接。应按相关事件时间戳而非仅按仓库订单创建时间戳应用日期筛选,以免排除订单生命周期后续发生的事件。
- 通过为每项明确要求的活动选择一行来构建事件行。查询必须使用每项活动经过验证的源字段,不得依赖ProcessMind推断事件。如果某项活动由状态历史或应用日志而非当前抬头字段表示,请使用该历史或日志,并保留事件时间戳和执行用户。
- 将所有活动时间戳统一到一个时区,最好使用UTC,或记录SAP应用服务器时区。将源系统特定的状态和流程代码转换为事件日志要求的准确活动名称:Warehouse Order Created、Goods Receipt Posted、Putaway Task Created、Putaway Task Confirmed、Picking Task Created、Picking Task Confirmed、Packing Started、Packing Completed、Staging Task Confirmed、Loading Started、Loading Completed、Goods Issue Posted、Warehouse Order Completed和Warehouse Order Canceled。
- 确保每个输出行都包含WarehouseOrder、ActivityName、EventTime、SourceSystem和LastDataUpdate。存在可靠的完成时间戳时,填充EventEndTime。对于任务级事件,将任务关联到其仓库订单。如果一个仓库订单包含多个相关任务,请为每个任务事件保留一行,同时保留仓库订单作为案例标识符。如果目标导入格式支持,请使用任务ID或源事件ID等稳定的次级排序键。
- 导出前验证结果。检查源数据包含相应业务事件时是否出现全部14个活动名称,时间戳是否处于请求范围内,仓库订单是否存在异常空值,以及重复行是否可由多个任务或重复状态变化解释。将数量与SAP运营报表或独立批准的提取结果进行核对。
- 将结果导出为ProcessMind兼容的分隔文件或数据库结果,每行一个事件。保留准确的必需列名,使用ISO 8601等明确的时间戳格式,按分隔格式要求为文本值加引号,并包含表头行。将文件上传到ProcessMind,或在ProcessMind中配置数据库连接,将WarehouseOrder设为案例标识符,ActivityName设为活动,EventTime设为开始时间戳,并在可用时将EventEndTime设为结束时间戳。
配置
- **源对象映射:**核实仓库订单、仓库任务、状态历史、货物移动、包装、集货和装载对应的实际数据库对象及字段。/SCWM/WHO和/SCWM/WT可能是相关逻辑对象,但在实施前必须确认已部署的数据库表示。
- **日期范围:**从受控的3至6个月时间段开始。初始测试使用较短时间段,完成核对后再扩大范围。增量运行之间保留少量重叠,以捕获延迟过账和更正记录。
- **事件时间戳选择:**已创建活动使用创建时间戳,已确认活动使用确认时间戳,收货和发货使用过账时间戳,包装、集货和装载使用经过核实的执行时间戳。不要用仓库订单创建时间替代所有事件时间。
- **筛选条件:**仅应用经过确认的业务筛选条件,例如仓库编号、公司代码、单据类型、仓库订单类型、活动区域、队列、工厂或源系统。公司代码和单据类型字段可能位于关联对象中,必须在目标系统中完成映射。
- **状态映射:**配置代表仓库订单完成和取消的准确SAP状态或流程代码。请与EWM职能负责人验证映射,因为状态代码及其存储方式可能因版本和实施方案而异。
- **SourceSystem:**设置用于标识EWM生产或报表实例的稳定值。不要从可为空的业务字段推导该值。
- **LastDataUpdate:**每次运行的所有记录都应一致填充提取时间戳或源数据刷新时间戳。
- **增量提取:**使用持久化高水位标记,依据最近一次成功提取的源时间戳,并设置重叠窗口以捕获延迟到达的记录。在可用时,使用经过确认的源标识符去重。
- **性能:**尽早限制日期范围,仅选择必需列,筛选已建立索引的字段,避免在谓词中对已建立索引的时间戳列使用函数,并将大范围数据按日或按周分批处理。在允许的情况下使用报表副本。
- **连接策略:**确认仓库订单与仓库任务之间的基数关系。连接任务、状态、物料和Handling Unit数据时,避免意外产生记录倍增。连接前先聚合或选择适当的事件记录。
- **时区:**配置源时区和转换规则。统一存储时间戳,并记录夏令时处理方式。
- **前提条件:**只读数据库授权、经批准的EWM架构访问权限、经过核实的数据字典映射、读取相关运营和历史对象的权限,以及经批准的ProcessMind导入配置。所需SAP模块、许可证和授权取决于已部署的EWM架构,必须由系统负责人确认。
a 示例查询 sql
WITH
params AS (
SELECT
CAST('[Start date and time]' AS TIMESTAMP) AS start_time,
CAST('[End date and time]' AS TIMESTAMP) AS end_time,
CAST('[Source system name]' AS VARCHAR(255)) AS source_system,
CAST(CURRENT_TIMESTAMP AS TIMESTAMP) AS last_data_update
),
warehouse_orders AS (
SELECT
CAST(wo.[Warehouse order ID field] AS VARCHAR(255)) AS WarehouseOrder,
CAST(wo.[Warehouse order type field] AS VARCHAR(255)) AS WarehouseOrderType,
CAST(wo.[Warehouse order status field] AS VARCHAR(255)) AS WarehouseOrderStatus,
CAST(wo.[Priority field] AS VARCHAR(255)) AS Priority,
CAST(wo.[Warehouse order creation timestamp field] AS TIMESTAMP) AS WarehouseOrderCreatedTime,
CAST(wo.[Warehouse order completion timestamp field] AS TIMESTAMP) AS WarehouseOrderCompletedTime,
CAST(wo.[Warehouse order cancellation timestamp field] AS TIMESTAMP) AS WarehouseOrderCanceledTime,
CAST(wo.[Material number field] AS VARCHAR(255)) AS MaterialNumber,
CAST(wo.[User field] AS VARCHAR(255)) AS [User]
FROM [Your warehouse order header table] wo
),
warehouse_tasks AS (
SELECT
CAST(wt.[Warehouse order ID field] AS VARCHAR(255)) AS WarehouseOrder,
CAST(wt.[Warehouse task ID field] AS VARCHAR(255)) AS WarehouseTask,
CAST(wt.[Task category or process type field] AS VARCHAR(255)) AS TaskType,
CAST(wt.[Material number field] AS VARCHAR(255)) AS MaterialNumber,
CAST(wt.[Task creation timestamp field] AS TIMESTAMP) AS TaskCreatedTime,
CAST(wt.[Task confirmation timestamp field] AS TIMESTAMP) AS TaskConfirmedTime,
CAST(wt.[User field] AS VARCHAR(255)) AS [User]
FROM [Your warehouse task table] wt
),
events AS (
SELECT wo.WarehouseOrder, 'Warehouse Order Created' AS ActivityName, wo.WarehouseOrderCreatedTime AS EventTime, CAST(NULL AS TIMESTAMP) AS EventEndTime, wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo
UNION ALL
SELECT gr.[Warehouse order ID field], 'Goods Receipt Posted', CAST(gr.[Goods receipt posting timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(gr.[Material number field] AS VARCHAR(255)), CAST(gr.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your goods receipt posting table] gr LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(gr.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT wt.WarehouseOrder, 'Putaway Task Created', wt.TaskCreatedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified putaway task type]'
UNION ALL
SELECT wt.WarehouseOrder, 'Putaway Task Confirmed', wt.TaskConfirmedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified putaway task type]' AND wt.TaskConfirmedTime IS NOT NULL
UNION ALL
SELECT wt.WarehouseOrder, 'Picking Task Created', wt.TaskCreatedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified picking task type]'
UNION ALL
SELECT wt.WarehouseOrder, 'Picking Task Confirmed', wt.TaskConfirmedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified picking task type]' AND wt.TaskConfirmedTime IS NOT NULL
UNION ALL
SELECT pk.[Warehouse order ID field], 'Packing Started', CAST(pk.[Packing start timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(pk.[Material number field] AS VARCHAR(255)), CAST(pk.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your packing event table] pk LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(pk.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT pk.[Warehouse order ID field], 'Packing Completed', CAST(pk.[Packing completion timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(pk.[Material number field] AS VARCHAR(255)), CAST(pk.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your packing event table] pk LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(pk.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT st.[Warehouse order ID field], 'Staging Task Confirmed', CAST(st.[Staging confirmation timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(st.[Material number field] AS VARCHAR(255)), CAST(st.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your staging event table] st LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(st.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT ld.[Warehouse order ID field], 'Loading Started', CAST(ld.[Loading start timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(ld.[Material number field] AS VARCHAR(255)), CAST(ld.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your loading event table] ld LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(ld.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT ld.[Warehouse order ID field], 'Loading Completed', CAST(ld.[Loading completion timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(ld.[Material number field] AS VARCHAR(255)), CAST(ld.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your loading event table] ld LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(ld.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT gi.[Warehouse order ID field], 'Goods Issue Posted', CAST(gi.[Goods issue posting timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(gi.[Material number field] AS VARCHAR(255)), CAST(gi.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your goods issue posting table] gi LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(gi.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT wo.WarehouseOrder, 'Warehouse Order Completed', wo.WarehouseOrderCompletedTime, CAST(NULL AS TIMESTAMP), wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo WHERE wo.WarehouseOrderCompletedTime IS NOT NULL
UNION ALL
SELECT wo.WarehouseOrder, 'Warehouse Order Canceled', wo.WarehouseOrderCanceledTime, CAST(NULL AS TIMESTAMP), wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo WHERE wo.WarehouseOrderCanceledTime IS NOT NULL
)
SELECT
e.WarehouseOrder,
e.ActivityName,
e.EventTime,
e.EventEndTime,
p.source_system AS SourceSystem,
p.last_data_update AS LastDataUpdate,
e.MaterialNumber,
e.[User],
e.WarehouseOrderType,
e.WarehouseOrderStatus,
e.Priority
FROM events e
CROSS JOIN params p
WHERE e.WarehouseOrder IS NOT NULL
AND e.EventTime IS NOT NULL
AND e.EventTime >= p.start_time
AND e.EventTime < p.end_time
ORDER BY e.WarehouseOrder, e.EventTime, e.ActivityName; 减少拣选错误,立即优化仓库管理
在数周内实现99.5%的库存准确率,消除履约延迟。
无需信用卡,几分钟即可完成设置。