您的退货与退款处理数据模板
您的退货与退款处理数据模板
- 建议收集的属性
- 需要跟踪的关键活动
- 提取指南
退货与退款处理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间 EventTime | 表示特定活动发生时间的精确时间戳。 | ||
| 说明 Event Time记录业务事件在系统中的日期和时间。此时间戳对于按时间顺序排列活动以及开展所有基于时间的分析至关重要。 在流程挖掘中,此属性用于计算活动之间的周期时间、识别每个步骤的持续时间,以及分析流程绩效随时间的变化。它是发现瓶颈、监控SLA遵循情况和理解退货流程时间动态的基础。 为什么重要 此时间戳对于排列事件顺序、计算所有持续时间和周期时间,以及识别流程延迟至关重要。 获取位置 通常取自与单据创建或状态变更相关的日期和时间字段,例如VBAK、LIKP和BKPF等表中的ERDAT(创建日期)和ERZET(创建时间),或会计单据中的过账日期(BUDAT)。 示例 2023-10-26T10:05:00Z2023-10-27T14:30:15Z2023-10-28T09:00:00Z | |||
| 活动名称 ActivityName | 退货与退款流程中发生的特定业务活动或事件的名称。 | ||
| 说明 此属性描述退货生命周期中的单个步骤或里程碑。活动代表实际执行的工作,例如“Return Order Approved”或“Item Inspection Completed”。这些活动源自SAP S/4HANA中记录的状态变更、单据创建或特定用户操作。 分析活动的顺序和频率是流程挖掘的核心。它有助于可视化流程图,识别常见和少见的流程路径,并定位频繁重复的活动,从而发现返工或效率问题。 为什么重要 活动构成流程图的基础,用于呈现和分析流程顺序、瓶颈及流程变体。 获取位置 活动名称通常由多类数据组合得出,包括VBUK/VBUP等表中的单据状态变更、VBAK(销售单据)和BKPF(会计单据)等抬头表中的创建事件,以及MSEG中的货物移动状态。 示例 退货申请已发起商品已在仓库收货已创建贷项通知单退款已处理 | |||
| 退货案例ID ReturnCaseId | 用于标识单个客户退货流程的唯一标识符,可关联从发起到关闭的所有相关活动。 | ||
| 说明 退货案例ID是用于归集单个退货实例中所有事件和活动的主要标识符。每个客户退货请求都会获得唯一ID,从而支持对整个流程进行端到端跟踪。 在流程挖掘中,该属性对于重构流程顺序至关重要。通过将“发起退货请求”“已收货”和“已处理退款”等分散事件连接为每个退货案例的完整时间线,您可以分析案例时长、流程变体和瓶颈。 为什么重要 这是从开始到结束跟踪退货的关键标识,支持包括周期时间和流程变体发现等所有案件级分析。 获取位置 通常是退货订单抬头表VBAK中的销售单据编号(VBELN),其中单据类别(VBTYP)表示该单据为退货。 示例 600001896000019060000191 | |||
| 数据最后更新时间 LastDataUpdateTimestamp | 表示此事件数据最近一次刷新或提取时间的时间戳。 | ||
| 说明 此属性记录最近一次数据提取或更新的日期和时间,提供有关所分析数据集新鲜度的元数据。 它有助于了解流程挖掘分析的时效性。用户可以查看数据的最新程度,这对于运营监控以及跟踪进行中案件的仪表板尤其重要。 为什么重要 表示数据的新鲜度,对于确保分析和仪表板基于最新信息至关重要。 获取位置 通常由ETL或数据管道工具在提取数据时生成并写入数据集。 示例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| 源系统ID SourceSystemId | 从中提取数据的源系统标识符。 | ||
| 说明 此属性指定事件数据来源的记录系统。对于此流程,通常是SAP S/4HANA实例ID。 在多系统环境中,此字段对于数据血缘、问题排查和确保数据完整性至关重要。如果退货在不同ERP实例中处理,或与仓库管理系统等外部系统集成,它还可以帮助区分数据。 为什么重要 为数据来源和血缘提供关键背景信息,尤其适用于多系统环境,可确保数据可追溯且值得信赖。 获取位置 此值通常是静态的,在数据提取时配置。它可以从SAP系统的管理信息中获取,例如系统ID(SID)。 示例 S4H_PROD_100S4Q_DEV_200 | |||
| 事件结束时间 EventEndTime | 标记活动完成时间的时间戳,用于计算活动持续时间。 | ||
| 说明 StartTime(EventTime)标记活动开始时间,EventEndTime标记活动结束时间。对于许多系统生成的事件,开始和结束时间相同,表示瞬时发生。但对于“Item Inspection”等具有可测量持续时间的活动,此属性至关重要。 此属性支持直接计算活动处理时间,是绩效分析的基础,有助于识别具体步骤,而不仅是步骤之间的间隔,定位最耗时的环节。 为什么重要 支持精确计算单个活动的持续时间,是定位具体流程步骤中效率问题的关键。 获取位置 通常通过推导获得。某些活动可能有单独字段,但更常见的情况是使用案件中后续活动的StartTime。 示例 2023-10-26T11:25:30Z2023-10-27T15:00:00Z2023-10-28T09:10:45Z | |||
| 产品ID ProductId | 被退回商品的唯一标识符。 | ||
| 说明 此属性指定退货涉及的物料或产品,将退货流程关联到产品目录中的具体商品。 按产品分析退货是识别高退货率商品的基础。高退货率可能表明存在质量缺陷、产品描述不准确或制造问题。这些数据有助于企业优化产品设计、供应商管理和库存策略。 为什么重要 将退货流程关联到具体产品,支持分析商品级退货率,并识别质量或描述问题。 获取位置 位于退货订单项目表VBAP或退货交货项目表LIPS的物料编号字段(MATNR)中。 示例 FG-10023HW-45981SW-LICENSE-PREM | |||
| 客户ID CustomerId | 发起退货的客户唯一标识符。 | ||
| 说明 此属性用于识别申请退货的客户,将流程实例关联到客户主数据中的具体主体。 按客户分析退货有助于识别客户退货率异常偏高等模式,这可能表明存在欺诈行为或客户不满。它还支持根据客户类型、价值或历史记录对退货流程进行分组,从而提供有针对性的服务级别。 为什么重要 将退货关联到具体客户,支持分析客户行为、客户分群,并识别频繁退货客户。 获取位置 位于退货订单抬头表VBAK的客户编号字段(KUNNR)中。 示例 CUST-001234CUST-005678CUST-009012 | |||
| 用户名 UserName | 执行该活动的员工用户ID。 | ||
| 说明 此属性用于识别负责完成任务的具体用户或系统代理,例如批准退货或创建Credit Memo的人员。在SAP中,通常通过记录单据创建者或修改者的字段获取。 按用户分析有助于识别高绩效个人或团队、培训需求和工作负载分布。它对于调查偏差也十分重要,因为它将流程操作关联到具体人员,支持合规和审计工作。 为什么重要 将流程活动归属到具体用户,从而支持分析团队绩效、工作负载和合规情况。 获取位置 通常位于单据抬头表中,例如VBAK(销售订单)、LIKP(交货)和BKPF(会计单据)中的ERNAM(创建者)。用户详细信息可通过用户主数据表USR21补充。 示例 CBROWNASMITHWF_BATCH | |||
| 退款金额 RefundAmount | 向客户发放的最终退款金额。 | ||
| 说明 此属性表示退货流程完成后实际冲抵或退还给客户的金额,通常记录在Credit Memo等财务单据中。 这是多项分析使用的关键财务指标,也是“Refund Amount Discrepancy Analysis”仪表板的基础,用于与申请金额进行比较。按金额对退货分组,还可以识别高价值退货是否遵循不同流程或需要更长时间解决。 为什么重要 跟踪退货的财务影响,对于分析退款准确性、识别高价值案件和了解整体成本至关重要。 获取位置 取自Credit Memo单据的净值字段(NETWR),该字段位于VBRK(开票单据抬头)或BSEG(会计单据分段)等表中。 示例 125.50999.0049.99 | |||
| 退货原因 ReturnReason | 客户提供的退货原因。 | ||
| 说明 此属性记录客户说明的退货原因,例如“Defective Item”“Wrong Size”或“No Longer Needed”。通常在发起退货时从预定义原因代码列表中选择。 分析退货原因对于识别产品质量问题、改进产品描述或优化销售流程至关重要。它直接反映客户不满意的原因,有助于确定业务改进重点,降低整体退货率。 为什么重要 深入揭示退货发生的原因,支持根因分析,以解决产品质量、履约错误或客户预期差距等问题。 获取位置 通常存储在退货销售订单项目表VBAP的ABGRU字段中,该字段表示销售单据的拒绝原因。 示例 001,质量不佳002,运输途中损坏005,发错商品 | |||
| 商品检验结果 ItemInspectionOutcome | 退回商品实物检查的结果。 | ||
| 说明 此属性记录商品入库后执行检查的结果。常见结果包括“Accepted”“Rejected - Damaged”或“Accepted - Resalable”。 这些数据为后续流程步骤提供关键背景,并决定发放全额退款、部分退款还是不予退款。分析检查结果有助于识别拒绝原因;如果商品经常在运输途中损坏,还可以为产品包装或承运商提供改进依据。 为什么重要 解释退款获批或被拒的决策过程,为商品状况和退款调整原因提供有价值的数据。 获取位置 此信息可能记录在质量管理模块(QM)的检验批中,也可能作为状态或原因代码记录在退货交货行项目(LIPS)中,还可能存在于自定义字段中。 示例 已接受,可再次销售已接受,待翻新已拒绝,客户造成的损坏已拒绝,退回商品错误 | |||
| 处理专员 ProcessingAgent | 负责处理手动活动的具体代理人或资源组。 | ||
| 说明 此属性用于识别执行特定任务的人员或团队。在共享服务环境中,它可以通过角色或团队进行标识,比“User Name”更加具体。 它对于“Refund Approval Efficiency”仪表板十分有价值,可用于分析不同代理人或团队的绩效,了解工作负载分布、识别培训需求,并发现可分享最佳实践的高绩效人员或团队。 为什么重要 支持在代理人或团队层面分析绩效,帮助管理工作负载、识别培训机会并提升效率。 获取位置 如果为代理人分配了SAP Business Partner职能,则可能从中获取此信息;也可以根据用户在HR组织结构中的部门或角色推导得出。 示例 一级支持仓库检验团队财务部,应付账款 | |||
| 是否自动化 IsAutomated | 用于标识活动由系统还是人工执行的标志。 | ||
| 说明 此布尔属性用于区分系统自动执行的活动,例如工作流或后台作业,与用户手动执行的活动。 它对于计算“Automated Refund Approval Rate”KPI和识别自动化机会至关重要。通过筛选手动任务,企业可以将流程改进重点放在最适合自动化的环节,从速度、成本和准确性方面获得更大收益。 为什么重要 区分手动任务和自动化任务,对于识别自动化机会和衡量数字化转型成效至关重要。 获取位置 通常根据User Name推导。例如,如果用户为“WF_BATCH”或其他系统ID,则将该活动标记为自动化。 示例 truefalse | |||
| 是否返工 IsRework | 用于标识案例中的某项活动是否重复执行了之前的活动。 | ||
| 说明 此计算布尔属性用于识别返工,即同一案例中的某项活动被执行多次。例如,商品检验需要重复进行,或贷项凭证创建后被取消,随后再次创建。 此属性是“Refund Processing Rework Analysis”仪表板和“Refund Rework Rate”KPI的重要基础。它通过突出容易出错或需要多次尝试的活动,量化流程低效,并指出需要加强控制或培训的环节。 为什么重要 通过标记重复工作,突出流程低效和错误,帮助您有针对性地改进流程,减少浪费和延迟。 获取位置 此标记通常由流程挖掘工具自动计算,也可以在数据转换阶段预先计算。它会检查同一活动名称是否已在同一案例中较早出现。 示例 truefalse | |||
| 申请退款金额 RequestedRefundAmount | 流程开始时最初申请或预期的退款金额。 | ||
| 说明 此属性记录初始退货请求中退回商品的价值,作为比较最终退款金额的基准。 “Refund Amount Discrepancy Analysis”仪表板需要使用此字段。将申请金额与实际退款金额进行比较,有助于识别因商品损坏、补货费或其他调整导致的部分退款问题,确保财务准确透明。 为什么重要 作为衡量退款准确性的基准,帮助识别和分析预期退款金额与实际退款金额之间的差异。 获取位置 通常取自初始退货销售订单中商品的净值,即VBAP表对应行项目中的净值(NETWR)。 示例 125.501050.0049.99 | |||
| 贷项通知单编号 CreditMemoNumber | 授权退款的Credit Memo单据唯一标识符。 | ||
| 说明 Credit Memo是为退回商品正式冲减客户账户的开票单据。此属性是该财务单据的唯一编号。 跟踪Credit Memo Number对于分析退货流程的财务结算环节至关重要。它标志着关键里程碑,通常会触发实际退款付款,也是财务对账和审计所必需的信息。 为什么重要 代表退款对应的正式财务交易,对于跟踪流程最后阶段以及开展财务审计至关重要。 获取位置 这是开票单据抬头表VBRK中的开票单据编号(VBELN),其中单据类别表示该单据为Credit Memo。 示例 900003459000034690000347 | |||
| 退款SLA目标日期 RefundSlaTargetDate | 退货案件应完成退款处理的目标日期。 | ||
| 说明 此属性定义退款处理的服务级别协议(SLA)截止日期。该日期通常根据业务规则计算,例如在退货获批或商品收货后的指定天数。 此字段是“Refund SLA Adherence Monitoring”仪表板及相关KPI的基础,可主动跟踪存在SLA违约风险的案件,并分析延迟根因,最终提升客户满意度。 为什么重要 为衡量SLA合规情况提供基准,帮助监控绩效、优先处理超期案件并提升客户满意度。 获取位置 这几乎总是一个推导字段。其逻辑通常基于关键日期(例如创建退货请求的日期)加上业务规则定义的时长,具体时长可能取决于客户类型或退货原因等因素。 示例 2023-11-10T23:59:59Z2023-11-15T23:59:59Z2023-11-20T23:59:59Z | |||
| 退款SLA遵循情况 RefundSlaAdherence | 用于标识退款是否在服务级别协议(SLA)规定的目标时间内完成处理。 | ||
| 说明 此计算属性用于检查“Refund Processed”活动是否在“Refund SLA Target Date”当天或之前发生。它为每个案例提供简单的SLA合规真假指示。 这是“Refund SLA Adherence Monitoring”仪表板和“Refund SLA Adherence Rate”KPI的核心指标。它有助于衡量相对于客户承诺的绩效,识别未达到预期的案例,并支持延迟根因分析。 为什么重要 直接衡量面向客户的承诺达成情况,是服务质量和客户满意度的重要指标。 获取位置 通过比较每个案例中“Refund Processed”活动的EventTime与“RefundSlaTargetDate”计算得出。 示例 truefalse | |||
| 退货交付单号 ReturnDeliveryNumber | 退货交货单据的唯一标识符。 | ||
| 说明 客户实际退回商品后,SAP会创建退货交货单据来管理入库物流。此属性就是该单据的唯一编号。 此ID对于跟踪退回商品的实物流转十分重要。它连接退货的财务和物流环节,支持详细分析收货和检查阶段。 为什么重要 在退货订单与商品实际收货之间建立关键关联,对于分析物流和仓库处理时间至关重要。 获取位置 这是交货抬头表LIKP中的交货单据编号(VBELN),其中单据类别表示该单据为退货交货。 示例 840000128400001384000014 | |||
| 退货政策ID ReturnPolicyId | 适用于此退货案件的退货政策标识符。 | ||
| 说明 此属性表示交易适用的具体退货政策或规则集。政策可能因产品类型、客户分群或购买时间而异。 这些数据是“Return Policy Compliance Overview”的基础。将每个案件与相应政策关联后,系统可以自动检查是否遵守退货期限、商品状况要求等规则,并标记偏差以供分析。 为什么重要 支持根据业务规则自动检查合规情况,确保退货按照政策一致处理。 获取位置 这通常不是标准SAP字段,可能需要根据产品类型、客户和销售日期等数据,按照业务逻辑推导得出。如果已实施,也可以存储在自定义字段中。 示例 STD-30DAYELEC-90DAY-WARRANTYFINAL-SALE-DEFECT | |||
| 退货订单状态 ReturnOrderStatus | 退货案件当前的整体状态。 | ||
| 说明 此属性提供退货案件在任意时间点的高层级状态,例如“Open”“In Process”或“Closed”。通常,这是根据最近完成的主要里程碑推导出的汇总状态。 它是“Current Return Case Status Dashboard”的基础,用于展示当前工作负载和案件分布。管理人员可以了解各流程阶段的案件数量,从而更好地分配资源和管理工作负载。 为什么重要 展示每个案件当前所处的流程位置,是跟踪工作负载和状态的运营仪表板不可或缺的信息。 获取位置 根据相关单据中的状态字段推导得出。例如,取相关销售订单(VBUK/VBUP)或交货单据中的抬头状态(GBSTK)或项目状态(LFSTK)。 示例 等待收货入库待检验待退款已关闭 | |||
| 遵循退货政策 ReturnPolicyAdherence | 用于标识退货案件是否符合既定退货政策的标志。 | ||
| 说明 此计算得出的布尔属性表示退货是否符合适用退货政策规定的标准。例如,逻辑可以检查退货是否在允许期限内发起,或退货原因是否适用于该产品。 此属性直接支持“Return Policy Compliance Overview”仪表板。它可以量化合规率,并深入查看不合规案件及其偏差原因,从而帮助更有效地执行政策。 为什么重要 量化业务规则的合规情况,帮助识别并减少可能影响盈利能力或造成流程异常的政策违规。 获取位置 根据业务规则计算。例如,(退货发起日期-原购买日期)≤[允许退货天数]。这需要原购买日期和政策规则。 示例 truefalse | |||
| 销售组织 SalesOrganization | 负责原始销售和退货的组织单元。 | ||
| 说明 Sales Organization是SAP中的关键组织结构元素,代表负责产品和服务销售与分销的组织单元,并分配给退货交易。 此属性支持按不同业务单元、地区或事业部筛选和比较退货流程,有助于识别某些销售组织是否退货率更高,或退货处理效率较低,为组织绩效分析提供依据。 为什么重要 支持比较不同业务单元、地区或销售渠道的退货流程绩效和退货率。 获取位置 位于退货订单抬头表VBAK的销售组织字段(VKORG)中。 示例 10002100US01 | |||
退货与退款处理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 商品已在仓库收货 | 该事件标志着退货商品已实际送达仓库或处理中心。当针对退货交货单执行Post Goods Receipt(PGR)并生成物料凭证时,系统会明确记录该事件。 | ||
| 为什么重要 这是启动检查和处置计时的关键里程碑。在此之前的延误通常由客户造成,此后的延误则属于内部环节。 获取位置 根据物料凭证表MSEG和MKPF中与退货相关的收货移动类型记录捕获。过账日期(MKPF-BUDAT)表示事件时间。 采集 该事件对应退货交货单的收货过账。 事件类型 explicit | |||
| 商品检查已完成 | 表示退货商品的质量和状况评估已完成。在Advanced Returns Management中,这通常是一个明确记录检查结果并决定后续操作的步骤,例如退款或报废。 | ||
| 为什么重要 检查耗时和结果会直接影响退款处理时间及库存管理。该活动对于分析检查效率和返工情况至关重要。 获取位置 在SAP Advanced Returns Management(ARM)中,这可以是检查事务明确记录的事件,也可以根据退货订单项目中表示检查结果的状态变化推断。 采集 根据与ARM物流后续活动相关的事务日志或状态变化捕获。 事件类型 explicit | |||
| 已创建贷项通知单 | 这是为退回商品冲减客户账户的正式开票单据创建事件。当Credit Memo由Credit Memo Request生成时,系统会明确记录此事件。 | ||
| 为什么重要 创建Credit Memo是重要的财务里程碑。它确认退款金额,并授权启动付款流程。 获取位置 从表VBRK中创建开票单据的记录获取,单据类别表示该单据为Credit Memo。该单据通过表VBFA与Credit Memo Request关联。 采集 保存新的Credit Memo开票单据后记录此事件,例如使用事务VF01。 事件类型 explicit | |||
| 已创建贷项通知单申请 | 检查成功后,此活动表示已创建向客户开具贷项的请求。系统会将其记录为新的销售单据,即Credit Memo Request,并引用原始退货订单。 | ||
| 为什么重要 这是退货流程进入财务结算环节的触发点。分析从检查到此步骤所需的时间,可以评估物流向财务交接的效率。 获取位置 从表VBAK中创建销售单据的记录获取,单据类别为Credit Memo Request。退货关联关系保存在单据流表VBFA中。 采集 保存新的Credit Memo Request单据后记录此事件。 事件类型 explicit | |||
| 退款已处理 | 此活动标志着退款流程的最后一步:财务贷项已清账,表示款项已发送给客户。系统根据财务模块中创建的清账凭证推断得出,该凭证用于结清客户账户上的未清贷项。 | ||
| 为什么重要 这是客户实际收到款项的时点。从发起退货到完成此步骤所需的时间,是影响客户满意度的重要因素,也是衡量SLA遵循情况的关键指标。 获取位置 根据财务会计行项目表BSEG中的清账凭证信息推断得出。与Credit Memo关联的客户行项目中的清账日期(BSEG-AUGDT)表示退款处理时间。 采集 当与Credit Memo关联的会计凭证填写清账日期字段时推断得出。 事件类型 inferred | |||
| 退货案件已关闭 | 这是最后一项活动,表示退货流程已完成,案件无需进一步处理。通常,当退货订单单据在系统中达到最终关闭状态时推断得出。 | ||
| 为什么重要 此事件定义流程生命周期的结束,从而支持计算端到端总周期时间,并确认案件已完全解决。 获取位置 当表VBAK中的退货订单整体状态,或VBAP中的订单项目状态达到“Complete”或“Closed”时推断得出。具体状态由系统的状态管理配置决定。 采集 根据退货订单单据状态变为“Complete”推断得出。 事件类型 inferred | |||
| 退货申请已发起 | 这是退货流程的起点,表示系统中正式创建了退货订单。当SAP S/4HANA保存新的退货订单类型销售凭证时,系统会明确记录这一事件。 | ||
| 为什么重要 该活动标志着退货案件生命周期正式开始。分析从此事件到案件关闭的耗时,对于衡量整体退货周期和客户体验至关重要。 获取位置 这是从VBAK表创建销售凭证时明确捕获的事件,其中凭证类别(VBAK-VBTYP)表示该凭证为退货订单。创建时间戳为VBAK-ERDAT。 采集 保存新的退货销售订单时记录该事件,例如使用事务VA01。 事件类型 explicit | |||
| 已创建会计凭证 | 当Credit Memo成功过账到财务会计模块时触发此事件。系统会在总账中创建相应分录,从会计角度正式确认该贷项。 | ||
| 为什么重要 此活动确认贷项已集成到财务系统。Credit Memo创建与会计过账之间的时间差,可以揭示开票到财务接口中的问题。 获取位置 从会计表BKPF中创建凭证抬头的记录获取,该抬头通过VBRK中的VBRK-BELNR与Credit Memo关联。 采集 开票单据成功过账到Financial Accounting后记录此事件。 事件类型 explicit | |||
| 已创建换货订单 | 此活动表示一种替代处理方式:不办理退款,而是创建新的销售订单,向客户寄送替换商品。当创建引用原始退货的新销售订单时,系统会记录此活动。 | ||
| 为什么重要 此活动有助于区分退款退货和换货退货。两者的流程路径和客户结果不同,是开展变体分析的关键。 获取位置 从VBAK中创建的新销售单据获取,该单据通过单据流表VBFA与退货订单关联。 采集 保存指定为替换订单的新销售订单单据后记录此事件。 事件类型 explicit | |||
| 退货交货单已创建 | 该活动表示已创建入库交货单,用于管理退货商品的实物接收。系统会明确记录创建引用退货订单的交货凭证这一事件。 | ||
| 为什么重要 这是重要的物流里程碑。退货批准与交货单创建之间的耗时,可反映退货信息传递至仓库或收货部门的效率。 获取位置 根据LIKP表中交货单抬头的创建记录捕获,并通过凭证流表VBFA与前序退货订单关联。 采集 保存新的退货交货单时记录该事件,例如使用事务VL01N。 事件类型 explicit | |||
| 退货已拒绝 | 表示退货商品不符合退货政策标准,退款或贷项申请已被拒绝。通常在检查完成后,通过为退货订单项目设置特定状态或原因代码来记录。 | ||
| 为什么重要 跟踪拒绝情况有助于分析退货政策的合规性,并识别常见的拒绝原因。这是流程中的关键异常路径。 获取位置 当退货订单项目设置拒绝原因(VBAP-ABGRU),或在Advanced Returns Management检查流程中分配特定状态时推断得出。 采集 根据退货单据项目中设置拒绝原因或特定“rejected”状态推断得出。 事件类型 inferred | |||
| 退货订单已批准 | 表示退货订单已正式批准或释放,可以进入下一阶段。通常通过销售凭证抬头或项目的状态变更推断,表明相关阻止状态已解除。 | ||
| 为什么重要 审批步骤可能是重要的延误来源。跟踪该活动有助于识别退货流程初始授权阶段的瓶颈。 获取位置 可根据状态管理表,或直接根据VBAK、VBAP表中的状态字段推断。释放状态发生变化,或交货冻结(VBAP-LIFSP)被移除,都可能表示已批准。 采集 可根据退货订单抬头或项目状态字段的变化推断,相关变化表明订单已释放或批准。 事件类型 inferred | |||
提取指南
步骤
- 前提条件验证:确保执行提取的用户账户在SAP S/4HANA中拥有访问所需Core Data Services(CDS)View的必要授权。关键View包括I_SalesDocument、I_SalesDocumentItem、I_SDDocumentFlow、I_DeliveryDocument、I_MaterialDocumentHeader、I_BillingDocument、I_JournalEntry和I_ClearedItem。
- 访问查询工具:登录已连接SAP S/4HANA数据库的SQL客户端或数据集成工具。可以使用SAP自有工具,例如SAP Analytics Cloud,也可以使用第三方ETL平台。
- 设置查询参数:执行前必须修改所提供的SQL查询。找到占位符,并替换为适用于您环境的正确参数,包括设置
[Start Date]、[End Date]、[Your Source System ID]、[Your Return Order Type]以及其他单据类型或公司代码筛选条件。 - 执行提取查询:复制完整SQL查询并在工具中执行。该查询通过合并多个SELECT语句的结果,将所有指定活动收集到一个数据集中。
- 理解查询逻辑:
UNION ALL结构中的每个SELECT块负责提取一项特定活动。它会连接多个CDS View以获取所需属性,将固定字符串赋给ActivityName,并选择EventTime对应的时间戳。 - 检查原始数据:查询完成后,简要检查输出结果。确认行数合理,并确保
ReturnCaseId、ActivityName和EventTime等关键列按预期填充。 - 数据转换:该查询生成扁平化事件日志格式,通常无需进行重大结构转换。不过,根据目标系统要求,您可能需要调整时间戳格式或数据类型。
- 导出事件日志:将查询结果集导出为CSV文件。确保文件使用UTF-8编码,避免用户名或产品描述出现字符问题。
- 上传到流程挖掘工具:生成的CSV文件现在可以上传到ProcessMind等流程挖掘平台。将文件中的列映射到工具中的对应字段,例如将
ReturnCaseId映射到Case ID,将ActivityName映射到Activity,将EventTime映射到Timestamp。
配置
- 前提条件:执行用户需要拥有与销售单据(VBAK)、交货单(LIKP)、开票凭证(VBRK)和会计数据(BSEG、BKPF)相关对象的显示授权。访问底层CDS View是必要条件。
- 数据范围筛选:必须按特定单据类型筛选查询,以隔离退货流程。配置退货订单类型(例如“RE”)、贷项凭证请求类型(例如“G2”)和换货订单类型(例如“SO”)的占位符。强烈建议同时按
CompanyCode或SalesOrganization筛选,以限制数据范围。 - 日期范围筛选:为控制性能和数据量,始终应用日期范围筛选。建议先使用最近3至6个月的数据。查询使用初始退货订单的创建日期(
I_SalesDocument.CreationDate)作为主要筛选条件。 - 性能注意事项:这是一个连接多个大型CDS View的综合查询,在源S/4HANA系统上执行可能消耗较多资源。请安排在业务低峰期提取,以减少影响。对于超大数据集,可考虑增量加载策略。
a 示例查询 sql
WITH ReturnOrders AS (
SELECT
SalesDocument AS ReturnCaseId,
CreationDate,
CreationDateTime,
CreatedByUser,
OrderReason,
SoldToParty
FROM I_SalesDocument
WHERE SalesDocumentType = '[Your Return Order Type]' -- e.g., 'RE'
AND CreationDate BETWEEN '[Start Date]' AND '[End Date]'
AND CompanyCode = '[Your Company Code]'
)
-- 1. Return Request Initiated
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Return Request Initiated' AS "ActivityName",
RO.CreationDateTime AS "EventTime",
RO.CreationDateTime AS "EventEndTime",
RO.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM ReturnOrders RO
JOIN I_SalesDocumentItem I ON RO.ReturnCaseId = I.SalesDocument
UNION ALL
-- 2. Return Order Approved
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Order Approved' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus <> 'A' -- Not Open, implying it has been processed/approved
AND I.SDProcessStatus <> 'A'
UNION ALL
-- 3. Return Delivery Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
LH.CreationDateTime AS "EventTime",
LH.CreationDateTime AS "EventEndTime",
LH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
LI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocument AS LH ON DF.SubsequentDocument = LH.DeliveryDocument
JOIN I_DeliveryDocumentItem AS LI ON LH.DeliveryDocument = LI.DeliveryDocument
WHERE DF.PrecedingDocumentCategory = 'C' AND DF.SubsequentDocumentCategory = 'J'
UNION ALL
-- 4. Goods Received at Warehouse
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Goods Received at Warehouse' AS "ActivityName",
MH.CreationDateTime AS "EventTime",
MH.CreationDateTime AS "EventEndTime",
MH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
MI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocumentItem AS LI ON DF.SubsequentDocument = LI.DeliveryDocument AND DF.SubsequentDocumentItem = LI.DeliveryDocumentItem
JOIN I_MaterialDocumentItem AS MI ON LI.DeliveryDocument = MI.DeliveryDocument AND LI.DeliveryDocumentItem = MI.DeliveryDocumentItem
JOIN I_MaterialDocumentHeader AS MH ON MI.MaterialDocument = MH.MaterialDocument AND MI.MaterialDocumentYear = MH.MaterialDocumentYear
WHERE DF.SubsequentDocumentCategory = 'J' AND MH.GoodsMovementType = '[Your Return Goods Receipt MVT]' -- e.g., '651', '653'
UNION ALL
-- 5. Item Inspection Completed
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Item Inspection Completed' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.ReturnsInspectionStatus = '4' -- 'Inspection Completed', adjust value based on your config
UNION ALL
-- 6. Return Rejected
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Return Rejected' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.SalesDocumentItemRejectionReason <> ''
UNION ALL
-- 7. Credit Memo Request Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
CM_REQ.CreationDateTime AS "EventTime",
CM_REQ.CreationDateTime AS "EventEndTime",
CM_REQ.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument
JOIN I_SalesDocumentItem I ON CM_REQ.SalesDocument = I.SalesDocument
WHERE CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]' -- e.g., 'CR'
UNION ALL
-- 8. Exchange Order Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Exchange Order Created' AS "ActivityName",
EX_ORD.CreationDateTime AS "EventTime",
EX_ORD.CreationDateTime AS "EventEndTime",
EX_ORD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS EX_ORD ON DF.SubsequentDocument = EX_ORD.SalesDocument
JOIN I_SalesDocumentItem I ON EX_ORD.SalesDocument = I.SalesDocument
WHERE EX_ORD.SalesDocumentType = '[Your Exchange Order Type]' -- e.g., 'OR'
UNION ALL
-- 9. Credit Memo Created
SELECT
DF_CM.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
BD.CreationDateTime AS "EventTime",
BD.CreationDateTime AS "EventEndTime",
BD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
BD.TotalNetAmount AS "RefundAmount",
BDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow AS DF_CM ON CM_REQ.SalesDocument = DF_CM.PrecedingDocument
JOIN I_BillingDocument AS BD ON DF_CM.SubsequentDocument = BD.BillingDocument
JOIN I_BillingDocumentItem AS BDI ON BD.BillingDocument = BDI.BillingDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE DF.PrecedingDocumentCategory = 'C'
UNION ALL
-- 10. Accounting Document Created
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Accounting Document Created' AS "ActivityName",
JE.CreationDateTime AS "EventTime",
JE.CreationDateTime AS "EventEndTime",
JE.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
JE.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_JournalEntry AS JE
JOIN I_JournalEntryItem JRI ON JE.AccountingDocument = JRI.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK'
UNION ALL
-- 11. Refund Processed
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Refund Processed' AS "ActivityName",
CI.ClearingDate AS "EventTime",
CI.ClearingDate AS "EventEndTime",
CI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CI.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_ClearedItem AS CI
JOIN I_JournalEntryItem JRI ON CI.AccountingDocument = JRI.AccountingDocument AND CI.FiscalYear = JRI.FiscalYear AND CI.LedgerGLLineItem = JRI.LedgerGLLineItem
JOIN I_JournalEntry JE ON JRI.AccountingDocument = JE.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK' AND CI.ClearingDate IS NOT NULL
UNION ALL
-- 12. Return Case Closed
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Case Closed' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus = 'C' -- 'Completed' 步骤
- 确认您可以直接读取包含相关销售、交付、开票、物料凭证、检验、状态和会计数据的SAP HANA架构。SAP S/4HANA部署中的具体架构、视图和字段名称各不相同,因此请将每个方括号占位符替换为系统中配置的对象和字段。
- 使用[Start date]、[End date]、[Company Code filter]和[Return document type filter]定义提取范围。首次提取建议使用三到六个月的滚动周期,只有在验证性能和完整性后再延长周期。
- 从[Your sales document header table]和[Your sales document item table]中识别退货订单数据。将数据范围限制为[Your return order document type configuration]中配置的退货订单类型。保留退货订单号和项目号,作为下游单据的主要关联字段。
- 使用[Your document flow table or view]解析从退货订单到入库退货交货、贷项凭证请求、换货订单和贷项凭证的单据流。不要假设单据流存储在VBAK或VBAP中。请根据系统采用的单据流模型配置关联字段。
- 从相关单据抬头和项目记录中提取明确的创建事件。从已配置的状态、检验、物料凭证、会计和清账数据源中提取审批、拒绝、检验、关闭、收货、会计和清账事件。每项活动都必须作为单独的事件行输出,因为ProcessMind不会推断事件。
- 将时间戳统一为一致的数据库时间戳类型和时区。针对每项活动使用已配置的事件时间戳优先级。如果只有日期和时间,请使用[Your system time zone]中配置的系统时区将两者合并。
- 为每个事件填充ReturnCaseId。使用源退货订单号;如果Advanced Returns Management存储了单独的案例键,则使用已配置的退货案例标识符。无法关联到退货案例的事件必须排除,或放入异常输出中进行处理。
- 填充必需列ReturnCaseId、ActivityName、EventTime、SourceSystemId和LastDataUpdateTimestamp。有数据时,同时填充推荐列,包括EventEndTime、UserName、ReturnReason、RefundAmount、ProductId和CustomerId。每次活动发生保留一行,不要将活动汇总为单个案例行。
- 使用validationSteps中的检查验证结果。确认全部十二个活动名称均已出现,确认每个案例中的时间戳顺序合理,并确认单据引用与源表一致。
- 将结果导出为UTF-8CSV或其他ProcessMind支持的表格格式。保留准确的列名,使用一行表头,以明确无歧义的ISO格式保留时间戳,并上传事件日志,将ReturnCaseId配置为案例标识符,将ActivityName配置为活动列。
配置
- 日期范围:先使用3至6个月的数据。使用[Start date]和[End date]参数,并保留足够历史数据,以涵盖在所选期间之前发起、但在期间内完成的案例。
- 退货数据范围:按[Your return order document type configuration]中配置的退货订单类型筛选。除非已在目标系统中验证,否则不要硬编码单据类型。
- 组织筛选条件:仅在必要时应用[Company Code filter]、销售组织、分销渠道、部门、工厂或客户筛选。确认筛选条件不会排除跨公司或公司间后续单据。
- 源对象:将[Your table name]和[Your view name]占位符替换为已批准的SAP S/4HANA表或CDS View。部署环境中可能提供VBAK、VBAP、VBRK和VBRP,但使用方式及扩展必须在执行前验证。
- 时间戳处理:为每项活动配置源时间戳字段和时区。统一存储EventTime和EventEndTime,最好使用UTC或双方约定的ProcessMind时区。
- 状态解释:配置系统中代表审批、拒绝、检验完成和案例关闭的确切状态值、原因代码、检验结果和关闭标记。
- 源系统标识:将[Source system identifier]替换为稳定值,例如提取平台使用的SAP系统标识。
- 刷新时间戳:将[Extraction timestamp]替换为查询开始运行的时间戳或源快照创建时间。除非需要行级刷新时间戳,否则同一次提取中的所有行使用相同值。
- 性能:在连接大型单据流、会计、物料凭证和状态数据源前,先限制退货数据范围。使用索引字段或分区裁剪字段,避免无条件扫描;只有在数据库管理员批准后,才物化中间结果。
- 增量提取:对于周期性运行,使用[Last successful extraction timestamp]和受控的重叠时间窗口,以捕获延迟更新。使用ReturnCaseId、ActivityName、源单据键和EventTime进行去重。
- 授权与前提条件:为所有已配置的源对象和字段获取读取授权,获得直接数据库访问批准,并确认适用的SAP组件和Advanced Returns Management功能已启用。
- 数据保护:仅保留必要的客户和财务字段,遵循组织隐私控制要求,并保护导出文件。
a 示例查询 sql
WITH
parameters AS (
SELECT
CAST('[Start date]' AS TIMESTAMP) AS start_ts,
CAST('[End date]' AS TIMESTAMP) AS end_ts,
CAST('[Extraction timestamp]' AS TIMESTAMP) AS extraction_ts,
CAST('[Source system identifier]' AS NVARCHAR(100)) AS source_system_id
FROM DUMMY
),
return_orders AS (
SELECT
h.[Return order number] AS return_case_id,
i.[Return order item number] AS return_item_id,
h.[Return order creation timestamp] AS return_created_ts,
h.[Return order creator] AS return_creator,
h.[Customer number] AS customer_id,
i.[Product number] AS product_id,
i.[Return reason] AS return_reason,
i.[Return order quantity] AS return_quantity,
h.[Company code] AS company_code,
h.[Return order document type] AS return_document_type
FROM [Your sales document header table] h
INNER JOIN [Your sales document item table] i
ON h.[Sales document number] = i.[Sales document number]
CROSS JOIN parameters p
WHERE h.[Return order creation timestamp] >= p.start_ts
AND h.[Return order creation timestamp] < p.end_ts
AND h.[Return order document type] IN ([Your return order document type filter])
AND h.[Company code] IN ([Company Code filter])
),
document_flow AS (
SELECT
ro.return_case_id,
ro.return_item_id,
f.[Preceding document number] AS preceding_document_id,
f.[Preceding item number] AS preceding_item_id,
f.[Subsequent document number] AS subsequent_document_id,
f.[Subsequent item number] AS subsequent_item_id,
f.[Subsequent document category] AS subsequent_document_category,
f.[Document flow creation timestamp] AS flow_created_ts
FROM return_orders ro
LEFT JOIN [Your document flow table or view] f
ON f.[Preceding document number] = ro.return_case_id
AND f.[Preceding item number] = ro.return_item_id
),
return_delivery AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS delivery_id,
df.subsequent_item_id AS delivery_item_id,
d.[Delivery creation timestamp] AS delivery_created_ts,
d.[Delivery creator] AS delivery_creator,
d.[Delivery completion timestamp] AS delivery_completed_ts
FROM document_flow df
INNER JOIN [Your delivery header table] d
ON d.[Delivery number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Inbound delivery document category]'
),
credit_memo_requests AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_request_id,
df.subsequent_item_id AS credit_memo_request_item_id,
c.[Credit memo request creation timestamp] AS request_created_ts,
c.[Credit memo request creator] AS request_creator
FROM document_flow df
INNER JOIN [Your credit memo request header table] c
ON c.[Credit memo request number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo request document category]'
),
exchange_orders AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS exchange_order_id,
df.subsequent_item_id AS exchange_order_item_id,
e.[Exchange order creation timestamp] AS exchange_created_ts,
e.[Exchange order creator] AS exchange_creator
FROM document_flow df
INNER JOIN [Your exchange order header table] e
ON e.[Exchange order number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Exchange order document category]'
),
credit_memos AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_id,
df.subsequent_item_id AS credit_memo_item_id,
b.[Credit memo creation timestamp] AS credit_memo_created_ts,
b.[Credit memo creator] AS credit_memo_creator,
b.[Credit memo amount] AS refund_amount,
b.[Accounting document number] AS accounting_document_id,
b.[Company code] AS billing_company_code
FROM document_flow df
INNER JOIN [Your billing document header table] b
ON b.[Billing document number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo document category]'
),
approval_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Approval timestamp] AS event_ts,
s.[Approval user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your approved or released status values])
),
inspection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Inspection completion timestamp] AS event_ts,
q.[Inspection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection status] IN ([Your completed inspection status values])
),
rejection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Rejection timestamp] AS event_ts,
q.[Rejection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection outcome or rejection code] IN ([Your rejection reason values])
),
goods_receipt_events AS (
SELECT
rd.return_case_id,
rd.return_item_id,
m.[Goods receipt posting timestamp] AS event_ts,
m.[Goods receipt posting user] AS user_name
FROM return_delivery rd
INNER JOIN [Your material document header table] m
ON m.[Reference delivery number] = rd.delivery_id
INNER JOIN [Your material document item table] mi
ON mi.[Material document number] = m.[Material document number]
AND mi.[Material document item number] = [Your material document item linkage]
WHERE m.[Goods movement type] IN ([Your goods receipt movement type values])
),
accounting_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
a.[Accounting posting timestamp] AS event_ts,
a.[Accounting user] AS user_name
FROM credit_memos cm
INNER JOIN [Your accounting document header table] a
ON a.[Accounting document number] = cm.accounting_document_id
AND a.[Company code] = cm.billing_company_code
WHERE a.[Accounting document status] IN ([Your posted accounting status values])
),
refund_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
cl.[Clearing timestamp] AS event_ts,
cl.[Clearing user] AS user_name
FROM credit_memos cm
INNER JOIN [Your customer clearing table or view] cl
ON cl.[Cleared accounting document number] = cm.accounting_document_id
WHERE cl.[Clearing status] IN ([Your completed clearing status values])
),
closure_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Closure timestamp] AS event_ts,
s.[Closure user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your final closed status values])
),
events AS (
SELECT ro.return_case_id, ro.return_item_id, 'Return Request Initiated' AS activity_name, ro.return_created_ts AS event_time, CAST(NULL AS TIMESTAMP) AS event_end_time, ro.return_creator AS user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)) AS refund_amount, ro.product_id, ro.customer_id FROM return_orders ro
UNION ALL
SELECT ae.return_case_id, ae.return_item_id, 'Return Order Approved', ae.event_ts, CAST(NULL AS TIMESTAMP), ae.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM approval_events ae INNER JOIN return_orders ro ON ro.return_case_id = ae.return_case_id AND ro.return_item_id = ae.return_item_id
UNION ALL
SELECT rd.return_case_id, rd.return_item_id, 'Return Delivery Created', rd.delivery_created_ts, rd.delivery_completed_ts, rd.delivery_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM return_delivery rd INNER JOIN return_orders ro ON ro.return_case_id = rd.return_case_id AND ro.return_item_id = rd.return_item_id
UNION ALL
SELECT gr.return_case_id, gr.return_item_id, 'Goods Received at Warehouse', gr.event_ts, CAST(NULL AS TIMESTAMP), gr.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM goods_receipt_events gr INNER JOIN return_orders ro ON ro.return_case_id = gr.return_case_id AND ro.return_item_id = gr.return_item_id
UNION ALL
SELECT ie.return_case_id, ie.return_item_id, 'Item Inspection Completed', ie.event_ts, CAST(NULL AS TIMESTAMP), ie.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM inspection_events ie INNER JOIN return_orders ro ON ro.return_case_id = ie.return_case_id AND ro.return_item_id = ie.return_item_id
UNION ALL
SELECT re.return_case_id, re.return_item_id, 'Return Rejected', re.event_ts, CAST(NULL AS TIMESTAMP), re.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM rejection_events re INNER JOIN return_orders ro ON ro.return_case_id = re.return_case_id AND ro.return_item_id = re.return_item_id
UNION ALL
SELECT cr.return_case_id, cr.return_item_id, 'Credit Memo Request Created', cr.request_created_ts, CAST(NULL AS TIMESTAMP), cr.request_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM credit_memo_requests cr INNER JOIN return_orders ro ON ro.return_case_id = cr.return_case_id AND ro.return_item_id = cr.return_item_id
UNION ALL
SELECT eo.return_case_id, eo.return_item_id, 'Exchange Order Created', eo.exchange_created_ts, CAST(NULL AS TIMESTAMP), eo.exchange_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM exchange_orders eo INNER JOIN return_orders ro ON ro.return_case_id = eo.return_case_id AND ro.return_item_id = eo.return_item_id
UNION ALL
SELECT cm.return_case_id, cm.return_item_id, 'Credit Memo Created', cm.credit_memo_created_ts, CAST(NULL AS TIMESTAMP), cm.credit_memo_creator, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM credit_memos cm INNER JOIN return_orders ro ON ro.return_case_id = cm.return_case_id AND ro.return_item_id = cm.return_item_id
UNION ALL
SELECT ac.return_case_id, ac.return_item_id, 'Accounting Document Created', ac.event_ts, CAST(NULL AS TIMESTAMP), ac.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM accounting_events ac INNER JOIN return_orders ro ON ro.return_case_id = ac.return_case_id AND ro.return_item_id = ac.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ac.return_case_id AND cm.return_item_id = ac.return_item_id
UNION ALL
SELECT rf.return_case_id, rf.return_item_id, 'Refund Processed', rf.event_ts, CAST(NULL AS TIMESTAMP), rf.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM refund_events rf INNER JOIN return_orders ro ON ro.return_case_id = rf.return_case_id AND ro.return_item_id = rf.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = rf.return_case_id AND cm.return_item_id = rf.return_item_id
UNION ALL
SELECT ce.return_case_id, ce.return_item_id, 'Return Case Closed', ce.event_ts, CAST(NULL AS TIMESTAMP), ce.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM closure_events ce INNER JOIN return_orders ro ON ro.return_case_id = ce.return_case_id AND ro.return_item_id = ce.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ce.return_case_id AND cm.return_item_id = ce.return_item_id
)
SELECT
e.return_case_id AS "ReturnCaseId",
e.activity_name AS "ActivityName",
e.event_time AS "EventTime",
e.event_end_time AS "EventEndTime",
e.user_name AS "UserName",
e.return_reason AS "ReturnReason",
e.refund_amount AS "RefundAmount",
e.product_id AS "ProductId",
e.customer_id AS "CustomerId",
p.source_system_id AS "SourceSystemId",
p.extraction_ts AS "LastDataUpdateTimestamp"
FROM events e
CROSS JOIN parameters p
WHERE e.event_time IS NOT NULL
ORDER BY e.return_case_id, e.event_time, e.activity_name; 立即优化SAP S/4HANA中的退货与退款处理
识别低效环节,将周期时间缩短30%,提升满意度。
无需信用卡。立即开始优化。