您的退货与退款处理数据模板
您的退货与退款处理数据模板
- 建议收集的属性
- 需要追踪的关键活动
- NetSuite 数据提取指南
退货与退款处理属性
| 名称 | 描述 | ||
|---|---|---|---|
| 事件timestamp EventTimestamp | 活动发生的精确日期和时间,作为流程的时间轴核心。 | ||
| 描述 Event Timestamp 记录了活动发生的准确时刻。该数据对于正确排序事件及所有基于时间的分析至关重要。它用于计算活动间的持续时间、总案例周期时间和等待时间,这些是绩效监控、瓶颈分析和 SLA 合规性检查的基础。时间戳必须准确,以确保流程挖掘洞察的可靠性。 为何重要 此属性提供了事件的时间顺序,这对于发现流程流并计算所有绩效指标(如周期时间和等待时间)是必要的。 获取方式 此信息通常源自 NetSuite 记录上的“创建日期”或“最后修改日期”字段,或源自与交易关联的系统注释子列表中的时间戳。 示例 2023-10-26T10:00:00Z2023-10-26T14:35:10Z2023-10-27T09:12:05Z | |||
| 活动名称 ActivityName | 退货流程中发生的特定业务事件或步骤的名称,例如“物品已检验”或“退款已处理”。 | ||
| 描述 Activity Name 描述了退货和退款生命周期中的特定步骤或里程碑。这些事件按时间戳排序,以构建流程流。通过分析活动的顺序和频率,可以识别最常见的流程路径、步骤间的瓶颈以及任何返工或重复活动。示例包括“退货授权已创建”、“物品已收货”和“贷项通知单 (Credit Memo) 已批准”。 为何重要 此属性定义了流程的步骤。它对于直观呈现流程图、分析流向变异以及识别瓶颈或返工循环至关重要。 获取方式 此属性通常源自退货授权和贷项通知单等交易记录的状态更改,或源自系统注释或自定义事件日志中记录的特定用户操作。 示例 已创建退货授权项目已接收物料已检验退款已处理退货授权已关闭 | |||
| 退货案例 ID ReturnCaseId | 单个客户退货或退款案例的唯一标识符,将从发起至关闭的所有相关活动关联起来。 | ||
| 描述 Return Case ID 是追踪退货端到端旅程的主要标识符。每个唯一的 ID 对应一个退货授权,允许对所有相关事件(如到货、检验和退款处理)进行全面分析。在流程挖掘中,此 ID 对于重建每个退货的完整流程至关重要,从而能够计算周期时间并识别案例层面的偏差。 为何重要 这是流程挖掘的基础属性,因为它将所有单个事件连接成连贯的端到端流程实例,从而实现对流程流和绩效的分析。 获取方式 这通常是 NetSuite 中退货授权记录的内部 ID 或交易 ID。 示例 RMA-0012345RMA-0012346RMA-0012347 | |||
| 最后数据更新 LastDataUpdate | 指示此流程数据最后一次刷新或更新的时间戳。 | ||
| 描述 此属性记录数据集最后一次从源系统更新的时间。这是一项关键的元数据,可让用户了解分析结果的新鲜度。在仪表板中显示此信息有助于管理预期,并确保基于对数据时效性的理解做出决策。 为何重要 提供数据新鲜度的透明度,这对于用户信任分析结果并理解其与当前运营状态的相关性至关重要。 获取方式 此时间戳在数据提取、转换与加载(ETL)过程中生成并添加。 示例 2024-05-21T02:00:00Z2024-05-22T02:00:00Z | |||
| 源系统 SourceSystem | 提取数据的系统,用于追踪数据来源。 | ||
| 描述 此属性标识流程数据的来源。在此背景下,通常为“NetSuite”。在可能合并多个系统数据的环境中,指定源系统对于确保清晰的数据血缘和可追溯性非常重要。 为何重要 识别 data 来源,这对于 data 治理、故障排除以及将多个系统的 data 组合以获得全局流程视图的场景至关重要。 获取方式 这是一个静态值(“NetSuite”),通常在数据提取和转换过程中添加。 示例 NetSuiteNetSuite ERP | |||
| 周期时间 CycleTime | 从退货申请创建到最终关闭所经过的总时长。 | ||
| 描述 Cycle Time 是为每个退货 case 计算的关键绩效指标。它衡量从第一个 event 到最后一个 event 的持续时间,提供流程效率的高层视图。该指标是“退货流程端到端周期时间”dashboard 和“平均退货周期时间”KPI 的基础。计算方法是用每个 case 最后一个活动的 timestamp 减去第一个活动的 timestamp。 为何重要 这是流程绩效的主要衡量标准。长周期时间通常指向效率低下、瓶颈或过多的手动工作,这会导致更高的运营成本和糟糕的客户体验。 获取方式 这不是源系统中的字段。它是流程挖掘分析期间计算的一项指标,通过从每个案例的最大时间戳中减去最小时间戳得出。 示例 10天4小时5 天 12 小时21 天 2 小时 | |||
| 处理代理人 ProcessingAgent | 在退货流程中执行特定活动的员工或用户。 | ||
| 描述 Processing Agent 识别负责执行特定任务的人员,例如批准退货或检验物品。此属性对于用户层级的绩效分析至关重要。它有助于识别高绩效员工、可能需要额外培训的领域以及团队内部的工作量分布不均问题。按代理人分析活动是“部门退货流程绩效”仪表板的关键。 为何重要 支持分析个人和团队绩效、工作负载平衡以及识别培训需求,直接影响运营效率。 获取方式 这可以从 NetSuite 交易的系统注释子列表中的“创建者”、“批准者”或用户字段中获取。 示例 爱丽丝·约翰逊鲍勃·威廉姆斯Charlie Brown | |||
| 实际退款金额 ActualRefundAmount | 最终实际退还给客户的货币金额。 | ||
| 描述 此属性代表根据贷项通知单或退款交易记录的、实际贷记或退还给客户的价值。由于入库费、运费或损坏物品的部分退款等调整,此金额可能与申请金额不同。此属性对于财务报告和计算“退款金额差异率”KPI 至关重要。 为何重要 代表退货的真实财务影响,对于财务对账和分析退款准确性至关重要。 获取方式 此值源自根据退货授权生成的贷项通知单交易中的“总计”字段。 示例 99.99140.000.00 | |||
| 退货状态 ReturnAuthorizationStatus | 退货授权的当前状态,例如“待批准”、“已批准”或“已关闭”。 | ||
| 描述 此属性指示退货案例在其生命周期中的当前状态。它是理解退货进展和细分案例的基础。例如,分析在“待收货”状态下花费的时间可以突出物流延迟,而在“待批准”中停留时间过长可能预示着内部瓶颈。它还用于确定退货的最终结果,如“已关闭”或“已拒绝”。 为何重要 提供每个退货在流程中所处阶段的快照,以便分析案例分布、状态持续时间和流程结果。 获取方式 这对应于 NetSuite 退货授权记录上的“状态”或类似字段。 示例 待审批待收货已批准已驳回已结案 | |||
| 退货类型 ReturnType | 根据客户提供的理由对退货进行的分类。 | ||
| 描述 退货类型根据根本原因对退货进行分类,如“产品瑕疵”、“尺寸不符”、“改变主意”或“与描述不符”。这种分类对于根本原因分析至关重要。通过分析不同退货类型的流程指标,企业可以识别产品质量问题、描述不准确或履行错误。此属性对于“按类型和渠道划分的退货绩效”仪表板至关重要。 为何重要 有助于识别退货的根本原因,从而支持对产品、营销描述或履行流程进行针对性改进,以降低退货率。 获取方式 这通常是退货授权表单上用于捕获退货原因的自定义字段或标准列表/记录字段。 示例 产品缺陷发错货品客户不满尺寸/颜色错误 | |||
| 部门 Department | 负责在特定阶段处理退货案例的业务部门或团队。 | ||
| 描述 此属性将流程活动分配给特定部门,如“客户服务”、“仓库”或“财务”。这对于理解团队间的交接和识别部门瓶颈至关重要。通过分析案例在特定部门中花费或等待的时间,企业可以精准定位延迟来源并优化资源分配。这是“部门退货流程绩效”仪表板的主要维度。 为何重要 允许按职能领域分析流程绩效,突出跨部门交接延迟和部门瓶颈。 获取方式 这可以从与活动关联的用户或员工记录中得出,或者从交易本身的“部门”字段中得出。这通常在 NetSuite 的员工记录中配置。 示例 仓库客户支持财务质量保证 | |||
| 产品标识 ProductIdentifier | 退回产品的唯一标识符,例如 SKU 或物品编号。 | ||
| 描述 此属性标识退货中涉及的具体物品。在产品层级分析退货对于识别退货率高的物品至关重要,这可能预示着质量缺陷、描述欠佳或其他问题。此类数据可对产品绩效进行深度挖掘,并为产品开发、采购和营销相关的决策提供参考。 为何重要 将退货流程数据与特定产品关联,实现产品相关问题的根本原因分析,助力降低整体退货率。 获取方式 这可以在退货授权记录的“物品 (Items)”子列表中找到。它对应于“物品”字段。 示例 SKU-TEE-BL-LPROD-00543ITEM-987123 | |||
| 客户ID CustomerId | 发起退货客户的唯一标识符。 | ||
| 描述 Customer ID 将退货交易与特定客户关联。这实现了以客户为中心的分析,例如识别频繁退货的客户(可能预示着不满或欺诈行为)。它还允许按客户类型或价值细分流程绩效,助力优先为大客户提供服务。 为何重要 有助于对退货行为进行客户层面的分析,并支持基于客户属性(如细分市场或终身价值)进行流程细分。 获取方式 这是 NetSuite 退货授权记录表头上的“客户”或“实体”字段。 示例 CUST-001CUST-002CUST-003 | |||
| 政策遵循度 ReturnPolicyAdherence | 指示退货是否符合既定的公司退货政策。 | ||
| 描述 此布尔或分类属性标记退货是否符合所有预定义的标准,例如退货窗口、物品状态和购买证明。它用于监控合规性并管理例外情况。“退货政策遵循异常”仪表板依靠此属性来突出需要特殊处理或审查的案例,有助于最大限度地降低风险并确保规则的一致执行。 为何重要 有助于监控和执行退货政策,降低违规退货带来的财务风险,并确保公平性和一致性。 获取方式 这几乎可以肯定是一个在退货授权记录上的自定义字段(可能是复选框或列表),通过工作流进行管理。 示例 合规不合规 - 超出退货窗口异常已批准 | |||
| 是否已自动化 IsAutomated | 一个布尔标志,指示活动是否由系统自动执行。 | ||
| 描述 此属性指示活动是由用户执行,还是由自动化系统、脚本或工作流执行。例如,初始的“退货授权已创建”事件可能通过客户门户自动完成,而“物品已检验”则是手动活动。追踪自动化有助于识别手动步骤的自动化机会,并衡量现有自动化带来的效率提升。 为何重要 有助于区分人工任务和自动化任务,这是识别自动化机会和衡量数字化转型工作影响的关键。 获取方式 这可以从与事件关联的用户中推断。NetSuite 中系统生成的事件通常与特定的系统用户或脚本 ID 关联。 示例 truefalse | |||
| 是否符合SLA IsSlaCompliant | 一个计算标志,指示退款是否在定义的 SLA 目标范围内处理。 | ||
| 描述 此布尔属性通过将“退款已处理”时间戳与“退款 SLA 目标日期”进行比较得出。如果退款在目标日期或之前处理,则值为 true,否则为 false。此标记简化了合规性报告和仪表板(如“退款 SLA 合规性监控”仪表板)的创建,并用于计算“退款 SLA 达成率”KPI。 为何重要 针对每个案例提供清晰的 SLA 绩效二元结果,便于长期追踪、报告和分析合规率。 获取方式 此属性在数据转换过程中或在流程挖掘工具内计算。逻辑为:“退款已处理”的 示例 truefalse | |||
| 申请退款金额 RequestedRefundAmount | 退货最初申请或预期的退款货币金额。 | ||
| 描述 此属性存储流程开始时的预期退款价值。通常基于退回物品的原始购买价格。该金额作为与最终退款金额进行比较的基准。“退款金额差异率”KPI 直接将此值与实际退款金额进行比较,以识别由入库费、部分退款或其他调整引起的差异。 为何重要 为财务分析提供基准,帮助追踪预期退款与实际退款金额之间的差异,并识别调整原因。 获取方式 此值源自退货授权交易行项目中的“金额”或“费率”字段。 示例 99.99150.0025.50 | |||
| 退款 SLA 目标日期 RefundSlaTargetDate | 根据服务水平协议预期的退款处理目标日期。 | ||
| 描述 Refund SLA Target Date 是一个计算出的时间戳,代表了向客户承诺的处理退款的期限。通常通过在关键事件(如“物品已收货”或“退款已批准”)上增加一个预定周期(如 5 个工作日)来计算。此属性对于“退款 SLA 合规性监控”仪表板和“退款 SLA 达成率”KPI 至关重要,使企业能够衡量其履行承诺的情况。 为何重要 支持针对客户承诺进行绩效的定量衡量,这对于维持客户满意度和信任至关重要。 获取方式 此日期通常不是标准字段。它必须通过在关键时间戳(如“物品已收到”日期)上增加预定义的 SLA 周期(例如 5 天)来得出。 示例 2023-11-01T23:59:59Z2023-11-05T23:59:59Z2023-11-10T23:59:59Z | |||
| 退款金额差异 RefundAmountDiscrepancy | 申请退款金额与实际退款金额之间的差额计算值。 | ||
| 描述 此指标通过从“申请退款金额”中减去“实际退款金额”得出。非零值表示流程中进行了调整,例如入库费或损坏物品补偿。此属性用于支持“退款金额差异率”KPI 分析,帮助标记有重大财务调整的案例以供进一步审查。 为何重要 突出退货过程中进行的财务调整,从而分析差异产生的原因,以及这些调整是否具有一致性和合理性。 获取方式 这是一个计算属性。公式为: 示例 0.0010.00-5.00 | |||
| 退货渠道 ReturnChannel | 最初购买或发起退货的渠道。 | ||
| 描述 Return Channel 标示退货的来源,例如“在线”、“店内”或“市场”。不同渠道可能有不同的退货流程、成本和客户预期。按渠道分析绩效有助于企业优化每个特定流程,有效分配资源,并了解特定渠道的问题。这是“按类型和渠道划分的退货绩效”仪表板的核心属性。 为何重要 支持跨不同业务渠道进行绩效对比,揭示特定于退货发起和处理方式的低效环节或最佳实践。 获取方式 此信息通常源自与退货关联的原始销售订单记录。它可能存储在“渠道”或“地点”字段中。 示例 网店零售店亚马逊商城电话订单 | |||
| 退货状态 ReturnCondition | 检验时评估的退回物品状态,例如“全新”、“损坏”或“已使用”。 | ||
| 描述 此属性捕获对退回物品进行实际检验的结果。状态决定了后续步骤,例如是否发放全额退款、物品是否重新入库或是否需要丢弃。分析此项评估的一致性和处理时间是“退货状态评估质量”仪表板的重点,对于财务对账和库存管理也至关重要。 为何重要 直接影响退货的财务结果和后续的库存动作。不一致的评估会导致财务损失和流程返工。 获取方式 这很可能是物品收据记录或退货授权记录上的一个自定义字段,由仓库人员在检验期间填写。 示例 可二次销售损坏 - 包装盒内已使用 - 状态良好缺料件 | |||
退货与退款处理活动
| 活动 | 描述 | ||
|---|---|---|---|
| 已创建退货授权 | 此活动标志着退货流程的启动,即客户申请退回物品。它在 NetSuite 中通过创建新的退货授权 (RA) 记录来明确捕获,该记录作为退货的主要案例标识符。 | ||
| 为何重要 作为流程的起点,此活动对于衡量总退货周期时间以及分析随时间变化的退货请求量至关重要。 获取方式 此事件是 NetSuite 中退货授权 (ReturnAuthorization) 记录的创建时间戳。用户、日期和初始状态(如“待批准”)通常在该记录上捕获。 捕获 记录 NetSuite 退货授权 (ReturnAuthorization) 交易的创建日期。 事件类型 explicit | |||
| 贷项通知单已创建 | 此活动表示通过创建贷项通知单 (Credit Memo) 启动了退货的财务部分。该文档详细列出了要退还给客户的金额,是在收到并批准物品后根据退货授权创建的。 | ||
| 为何重要 贷项通知单 (Credit Memo) 的创建是关键的财务里程碑。从到货到创建贷项通知单的时间反映了从检验到入账流程的效率。 获取方式 此事件是贷项通知单 (CreditMemo) 交易的创建时间戳。贷项通知单上的“创建自 (Created From)”字段将其链接回退货授权。 捕获 记录 NetSuite 贷项通知单 (CreditMemo) 交易的创建日期。 事件类型 explicit | |||
| 退款已处理 | 这是最后的财务结算,即资金退还给客户。它通过创建从贷项通知单生成的客户退款 (Customer Refund) 交易来明确捕获。 | ||
| 为何重要 此活动对于衡量 SLA 合规性和客户满意度至关重要。从“贷项通知单已批准”到“退款已处理”的持续时间直接反映了财务部门的处理速度。 获取方式 此事件是客户退款 (CustomerRefund) 交易的创建时间戳。该交易上的“创建自 (Created From)”字段将其链接回贷项通知单。 捕获 记录 NetSuite 客户退款 (CustomerRefund) 交易的创建日期。 事件类型 explicit | |||
| 退货授权已关闭 | 这是最后一项活动,标志着所有处理完成后退货案例的行政关闭。这根据退货授权记录到“已关闭”状态的最终状态更改推断。 | ||
| 为何重要 作为流程的最终终点,此活动对于计算端到端周期时间以及识别退款处理后长期处于开启状态的 case 至关重要。 获取方式 推导自退货授权记录的系统备注或 workflow 历史记录,即当“状态”字段更新为最终状态(如“已关闭”)时。 捕获 检测退货授权记录状态变更为“已关闭”的情况。 事件类型 inferred | |||
| 退货授权已批准 | 此活动代表员工正式批准客户的退货申请,允许流程继续进行。通常通过推断退货授权记录中状态字段的更改(例如从“待批准”到“待收货”)来捕获。 | ||
| 为何重要 追踪此批准步骤对于识别初始审核阶段的瓶颈至关重要。此处的延迟会直接影响通知客户和收到退回物品所需的时间。 获取方式 推导自退货授权记录的系统备注或 workflow 历史记录,特别是当“状态”字段更新为已批准状态(例如“待收货”)时。 捕获 检测退货授权记录状态变更为“已批准”的情况。 事件类型 inferred | |||
| 项目已接收 | 此活动标志着在仓库或处理中心实际收到退回的物品。在 NetSuite 中,这通过创建链接到原始退货授权的物品收据 (Item Receipt) 交易来明确记录。 | ||
| 为何重要 这是一个关键里程碑,标志着流程从客户操作转向内部处理。从“退货已批准”到“物品已收到”的时间衡量了客户退货速度,而该事件之后的时间则衡量了内部效率。 获取方式 此事件是物品收据 (ItemReceipt) 交易的创建时间戳。该记录直接链接到源退货授权。 捕获 记录与退货授权 (RA) 关联的 NetSuite 物品收据 (ItemReceipt) 交易的创建日期。 事件类型 explicit | |||
| 已通知客户 | 代表就关键状态更新向客户发送通知,例如批准、收到物品或已处理退款。这通常根据记录中通信 (communication) 选项卡下记录的系统生成邮件的时间戳推断。 | ||
| 为何重要 及时的沟通是客户满意度的关键。衡量里程碑与客户通知之间的滞后时间有助于发现客户体验中的落后环节。 获取方式 需要系统分析。从退货授权 (ReturnAuthorization) 或贷项通知单 (CreditMemo) 的通信子选项卡上的外发邮件时间戳或用户注释中捕获。 捕获 与案例关联的电子邮件或通信日志条目的时间戳。 事件类型 inferred | |||
| 换货订单已创建 | 此活动代表换货场景,即为客户创建新销售订单而非退款。此事件通常通过创建一个链接回原始退货授权的销售订单来捕获。 | ||
| 为何重要 将换货作为一条独立路径进行追踪,有助于分析客户偏好以及换货流程对比退款流程的效率。这是一个常见且重要的变体。 获取方式 此事件是新销售订单 (SalesOrder) 交易的创建时间戳。与退货授权 (ReturnAuthorization) 的链接可能位于标准或自定义字段中,需要系统分析。 捕获 记录与退货授权 (ReturnAuthorization) 关联的销售订单 (SalesOrder) 的创建日期。 事件类型 explicit | |||
| 物料已检验 | 此概念性活动代表完成对退回物品的实际检验以评估其状态。由于 NetSuite 缺乏标准的“检验”对象,这通常根据退货授权或物品收据上的自定义字段或状态更新来推断。 | ||
| 为何重要 检验通常是一个主要的瓶颈。跟踪其完成时间对于分析专员绩效、决策一致性及其对后续退款审批的影响至关重要。 获取方式 需要系统分析。这可能通过退货授权 (ReturnAuthorization) 记录上自定义“检验状态”字段的更改来推断,或者可能是一个未记录的线下流程。 捕获 推导自退货授权或入库单上自定义状态字段的变更。 事件类型 inferred | |||
| 贷记通知单已批准 | 代表贷项通知单 (Credit Memo) 的正式批准,这通常是大额退款或财务控制的一部分。这根据贷项通知单记录上的状态更改推断,表明其已准备好应用或支付。 | ||
| 为何重要 如果需要财务审批,这一步可能会成为重大瓶颈。分析其持续时间有助于在不延误客户退款的情况下简化财务控制。 获取方式 推导自贷记通知单记录的系统备注,特别是当审批状态字段从“待审批”更新为“已批准”或“开启”时。 捕获 检测贷记通知单交易状态变更为“已批准”的情况。 事件类型 inferred | |||
| 贷项通知单已应用 | 此活动代表了现金退款之外的另一种方式,即贷项通知单应用于未结客户发票。这根据贷项通知单上的“应用于 (Applied To)”链接推断,表明信用额度已被使用。 | ||
| 为何重要 区分现金退款和信用申请对财务分析非常重要。与直接退款相比,该路径代表了另一种流程解决类型。 获取方式 推导自贷记通知单的系统备注或相关记录,特别是当其与发票交易关联以抵消客户余额时。 捕获 检测将贷记通知单 (CreditMemo) 应用于发票交易的操作。 事件类型 inferred | |||
| 退货授权已拒绝 | 这代表拒绝客户退货申请的决策,通常是因为违反政策。此事件通过推断退货授权记录在没有进一步处理的情况下更改为“已拒绝”或“已关闭”状态来捕获。 | ||
| 为何重要 分析拒绝情况有助于识别违规退货请求的常见原因,从而为客户沟通和政策说明提供依据。这是偏离“顺畅路径”的一个关键指标。 获取方式 推导自退货授权记录的系统备注或 workflow 历史记录,即当“状态”字段更新为最终的“已拒绝”状态时。 捕获 检测退货授权记录状态变更为“已拒绝”的情况。 事件类型 inferred | |||
提取指南
步骤
- 导航至创建已保存搜索:登录 NetSuite。导航至“报表 > 新建搜索”。在“新建已保存搜索”页面上,点击“交易” (Transaction)。
- 定义主要标准:在已保存搜索设置页面的“标准”选项卡和“标准”子选项卡下,设置以下筛选器以隔离退货授权记录:
Type选择Return Authorization(退货授权)Main Line选择Yes(主线)- 添加
Date Created(创建日期) 筛选器,并将其设置为您所需的日期范围,例如“最近 3 个月内”。这对于管理 data 量至关重要。
- 配置属性的结果列:转到“结果”选项卡。添加以下字段,这些字段将成为 event 日志中的属性。根据需要使用“自定义标签”进行重命名,以确保清晰度。
- Case ID:
Document Number或TranID(自定义标签:ReturnCaseId) - 退货状态:
Status(自定义标签:ReturnAuthorizationStatus) - 处理专员:
Created By或适用的自定义字段 (自定义标签:ProcessingAgent) - 部门:
Department(自定义标签:Department) - 退货类型:自定义字段,如
[Your Return Reason Field](自定义标签:ReturnType) - 退款金额:
Amount(自定义标签:ActualRefundAmount)
- Case ID:
- 为 Event Timestamp 添加公式列:这是最关键的一步。对于 12 个活动中的每一个,您需要添加一个“公式(日期/时间)”列。每个公式使用 CASE 语句,仅在特定 event 发生时返回 timestamp。有关每个活动使用的确切公式,请参阅“查询”部分。
- 添加静态列:在结果中添加两个“公式(文本)”列:
- 对于
SourceSystem,使用公式:'NetSuite'。 - 对于
LastDataUpdate,使用代表运行日期的公式,如{today}。如需精确 timestamp,则为导出时间。
- 对于
- 保存并导出搜索:为您的搜索命名,例如“ProcessMind Returns Extraction”。点击“保存并运行”。显示结果后,点击“导出”图标并选择“CSV”。
- 将 Data 转换为 Event 日志:导出的 CSV 将是“宽”格式,每个退货 case 占一行,且包含多个代表不同 event timestamp 的列。您必须将其转换为“长”格式的 event 日志。使用 Microsoft Excel Power Query(逆透视列)、Python 或其他脚本工具来执行此转换。
- 对于 CSV 中的每一行,为每个非空 event timestamp 列创建多个新行。
- 转换后的新表应包含
ReturnCaseId、ActivityName和EventTimestamp等列。ActivityName来自原始 timestamp 列的标题(例如“退货授权已创建”),EventTimestamp是该列中的值。
- 完成上传准备:确保最终的 CSV 文件具有所需的标题:
ReturnCaseId、ActivityName、EventTimestamp、SourceSystem、LastDataUpdate以及任何推荐的属性。文件现在已准备好 upload 到 ProcessMind。
配置
- 搜索类型:已保存搜索 (Saved Search) 必须是
Transaction搜索。 - 日期范围:务必在退货授权的“创建日期”字段上应用日期范围筛选器。建议选择 3-6 个月的时间范围,以平衡 data 完整性与系统性能。
- 主要筛选器:搜索必须筛选
Type为Return Authorization且Main Line为Yes,以确保每个退货 case 只有一条初始记录。 - 自定义字段:提取的准确性,特别是对于“货品已检验”等概念性 event 或“退货类型”等属性,很大程度上取决于贵公司在交易记录中对自定义字段的使用。提供的公式包含
{custbody_...}等占位符,必须根据您的 NetSuite 配置进行调整。 - 用户权限:运行搜索的用户需要拥有所有涉及的交易类型的查看权限:退货授权、入库单、贷记通知单、客户退款和销售订单。
- 性能:对于退货量非常大的账户,这种全量搜索可能会运行缓慢。请考虑在非高峰时段运行,或将其设置为自动导出到文件柜。
a 查询示例 config
This configuration represents the settings in the NetSuite Saved Search UI. The 'Results' tab should be configured with the following columns and formulas.
**Criteria Tab:**
* `Type` = `Return Authorization`
* `Main Line` = `true`
* `Date Created` = `[Specify Desired Date Range]`
**Results Tab (Columns):**
| Custom Label | Field / Formula Type | Formula / Field ID |
|---|---|---|
| `ReturnCaseId` | Formula (Text) | `{tranid}` |
| `SourceSystem` | Formula (Text) | `'NetSuite'` |
| `LastDataUpdate` | Formula (Date/Time) | `{today}` |
| `ReturnAuthorizationStatus` | Field | `Status` |
| `ProcessingAgent` | Field | `Created By` |
| `Department` | Field | `Department` |
| `ReturnType` | Field | `{custbody_return_reason}` |
| `ActualRefundAmount` | Field | `Amount` |
| `CycleTime` | Formula (Numeric) | `CASE WHEN {status} = 'Closed' THEN {lastmodifieddate} - {datecreated} ELSE NULL END` |
| `Activity_ReturnAuthorizationCreated` | Field | `Date Created` |
| `Activity_ReturnAuthorizationApproved` | Formula (Date/Time) | `MIN(CASE WHEN {systemnotes.newvalue} = 'Pending Receipt' AND {systemnotes.field} = 'Status' THEN {systemnotes.date} ELSE NULL END)` |
| `Activity_ReturnAuthorizationRejected` | Formula (Date/Time) | `MIN(CASE WHEN {systemnotes.newvalue} = 'Rejected' AND {systemnotes.field} = 'Status' THEN {systemnotes.date} ELSE NULL END)` |
| `Activity_ItemReceived` | Formula (Date/Time) | `{applyingtransaction.trandate}` |
| `Activity_ItemInspected` | Formula (Date/Time) | `CASE WHEN {custbody_inspection_status} = 'Complete' THEN {custbody_inspection_date} ELSE NULL END` |
| `Activity_CreditMemoCreated` | Formula (Date/Time) | `{createdfrom.trandate}` |
| `Activity_CreditMemoApproved` | Formula (Date/Time) | `MIN(CASE WHEN {createdfrom.systemnotes.newvalue} = 'Open' AND {createdfrom.systemnotes.field} = 'Status' THEN {createdfrom.systemnotes.date} ELSE NULL END)` |
| `Activity_RefundProcessed` | Formula (Date/Time) | `{createdfrom.appliedtotransaction.trandate}` |
| `Activity_CreditMemoApplied` | Formula (Date/Time) | `CASE WHEN {createdfrom.status} = 'Fully Applied' AND {createdfrom.appliedtotransaction.type} = 'Invoice' THEN {createdfrom.appliedtotransaction.date} ELSE NULL END` |
| `Activity_ExchangeOrderCreated` | Formula (Date/Time) | `{custbody_exchange_order.trandate}` |
| `Activity_CustomerNotified` | Formula (Date/Time) | `MAX({messages.messagedate})` |
| `Activity_ReturnAuthorizationClosed` | Formula (Date/Time) | `MIN(CASE WHEN {systemnotes.newvalue} = 'Closed' AND {systemnotes.field} = 'Status' THEN {systemnotes.date} ELSE NULL END)` | 步骤
- 启用 SuiteAnalytics Connect:确保您的 NetSuite 账户拥有 SuiteAnalytics Connect 许可证。管理员必须在“设置 > 公司 > 启用功能 > 分析”中启用该功能。
- 分配用户权限:授予连接用户角色“SuiteAnalytics Connect”权限。该用户还需要拥有对所有待查询记录(如交易、员工和客户)的查看权限。
- 安装 ODBC 驱动程序:从 NetSuite 的 SuiteAnalytics Connect 下载页面下载并安装适用于您操作系统的 NetSuite ODBC 驱动程序。
- 配置 DSN:在运行查询的机器上设置 Data 源名称 (DSN)。输入您的服务 Data 源、服务器主机名、端口、角色 ID、账户 ID 和凭据。
- 连接 SQL 客户端:使用 SQL 客户端(如 DBeaver 或 Microsoft SQL Server Management Studio),通过您配置的 DSN 连接到 NetSuite。
- 准备 SQL 查询:将提供的 SQL 查询复制到您的客户端。该查询旨在提取退货和退款流程中的所有关键 event。
- 自定义查询:修改查询中的占位符。您至少需要更新
ReturnAuthorizations公用表表达式 (CTE) 中的日期范围,以筛选所需的时间段。您可能还需要调整自定义字段名称(如CUSTBODY_RETURN_TYPE)或特定的状态值,以匹配您的 NetSuite 配置。 - 执行查询:针对 NetSuite 数据库副本运行自定义 SQL 查询。执行时间可能因日期范围和 data 量而异。
- 查看并导出 data:查询完成后,检查结果以确保其准确性。将整个结果集导出为 CSV 文件。
- 完成上传准备:确保 CSV 文件标题符合要求的属性:
ReturnCaseId、ActivityName、EventTimestamp、SourceSystem、LastDataUpdate等。验证EventTimestamp列是否使用了统一的日期/时间格式。文件现在已准备好 upload 到 ProcessMind。
配置
- 前提条件:需要拥有包含 SuiteAnalytics Connect 附加模块的 NetSuite 许可证。执行连接的用户角色必须具备“SuiteAnalytics Connect”权限,并拥有对交易、实体和员工记录的读取权限。
- Data 源配置:您必须使用 NetSuite ODBC 驱动程序配置 DSN(Data 源名称)。这需要您的 Account ID、Role ID 和凭据。生产环境的服务主机通常为
odbcserver.netsuite.com。 - 日期范围筛选:务必在选择退货授权的初始 CTE 中应用日期范围筛选器。如果不加筛选,查询将尝试提取所有退货 data,这可能导致速度极慢或连接超时。建议在初始分析时选择 3 到 6 个月的范围。
- 关键交易类型:该查询针对几个核心交易类型:ReturnAuthorization、ItemReceipt、CreditMemo、CustomerRefund 和 SalesOrd(用于换货)。请确保您的流程使用了这些标准对象。
- 自定义字段依赖:诸如“货品已检验”之类的活动以及“退货类型”之类的属性通常记录在自定义字段中。提供的查询使用了
CUSTBODY_INSPECTION_STATUS和CUSTBODY_RETURN_TYPE等占位符。您必须识别系统中正确的自定义字段 ID 并相应更新查询。 - 性能注意事项:这是一个涉及多个连接和大型
UNION ALL结构的复杂查询。请在非高峰时段执行,以尽量减少对系统性能的影响。对于极大型 data 集,请考虑分段运行查询并合并结果。
a 查询示例 sql
WITH ReturnAuthorizations AS (
SELECT
T.TRANSACTION_ID AS ReturnCaseId,
T.TRANDATE
FROM
TRANSACTION T
WHERE
T.TYPE = 'ReturnAuthorization'
AND T.TRANDATE BETWEEN TO_DATE('[YYYY-MM-DD]', 'YYYY-MM-DD') AND TO_DATE('[YYYY-MM-DD]', 'YYYY-MM-DD')
)
SELECT
RA.ReturnCaseId AS "ReturnCaseId",
'Return Authorization Created' AS "ActivityName",
T.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION T
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON T.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
UNION ALL
SELECT
RA.ReturnCaseId,
'Return Authorization Approved' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE = 'Pending Receipt'
UNION ALL
SELECT
RA.ReturnCaseId,
'Return Authorization Rejected' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE IN ('Rejected', 'Closed')
UNION ALL
SELECT
RA.ReturnCaseId,
'Item Received' AS "ActivityName",
IR.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION IR
INNER JOIN TRANSACTION T_RA ON IR.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON IR.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE IR.TYPE = 'ItemReceipt'
UNION ALL
SELECT
RA.ReturnCaseId,
'Item Inspected' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SN.FIELD = 'TRANSACTION.CUSTBODY_INSPECTION_STATUS' AND SN.NEW_VALUE = 'Completed'
UNION ALL
SELECT
RA.ReturnCaseId,
'Credit Memo Created' AS "ActivityName",
CM.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION CM
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON CM.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE CM.TYPE = 'CreditMemo'
UNION ALL
SELECT
RA.ReturnCaseId,
'Credit Memo Approved' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION CM ON SN.TRANSACTION_ID = CM.TRANSACTION_ID
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE CM.TYPE = 'CreditMemo' AND SN.FIELD = 'TRANSACTION.APPROVAL_STATUS' AND SN.NEW_VALUE = 'Approved'
UNION ALL
SELECT
RA.ReturnCaseId,
'Refund Processed' AS "ActivityName",
REF.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
ABS(REF.TOTAL) AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION REF
INNER JOIN TRANSACTION CM ON REF.APPLIED_TO_TRANSACTION_ID = CM.TRANSACTION_ID
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON REF.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE REF.TYPE = 'CustomerRefund'
UNION ALL
SELECT
RA.ReturnCaseId,
'Credit Memo Applied' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION CM ON SN.TRANSACTION_ID = CM.TRANSACTION_ID
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE CM.TYPE = 'CreditMemo' AND SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE = 'Fully Applied'
UNION ALL
SELECT
RA.ReturnCaseId,
'Exchange Order Created' AS "ActivityName",
SO.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION SO
INNER JOIN TRANSACTION T_RA ON SO.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SO.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SO.TYPE = 'SalesOrd'
UNION ALL
SELECT
RA.ReturnCaseId,
'Customer Notified' AS "ActivityName",
MSG.MESSAGE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM MESSAGES MSG
INNER JOIN TRANSACTION T ON MSG.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON MSG.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE MSG.INCOMING = 'F'
UNION ALL
SELECT
RA.ReturnCaseId,
'Return Authorization Closed' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE T.TYPE = 'ReturnAuthorization' AND SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE LIKE '%Closed%';