您的Order to Cash流程:开票与账单数据模板
您的Order to Cash流程:开票与账单数据模板
- 建议收集的属性
- 需要跟踪的关键活动
- NetSuite数据提取指南
订单到收款-开票与发票处理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间戳 EventTimestamp | 特定活动或事件发生的精确日期和时间。 | ||
| 说明 该属性记录活动发生的准确时刻,是按时间顺序排列事件以及开展所有基于时间的分析的关键组成部分。 在流程挖掘中,事件时间戳用于计算活动间周期时间、案例持续时间和等待时间。它对于识别瓶颈、根据SLA衡量流程绩效以及了解开票流程的时间动态至关重要。例如,它可用于计算发票生成周期时间和应收账款周转天数(DSO)。 为什么重要 它提供事件的时间顺序,对于计算所有基于持续时间的指标、识别瓶颈以及分析流程绩效随时间的变化至关重要。 获取位置 时间戳信息通常位于NetSuite中每笔发票交易的系统备注、审计轨迹或相关记录的“创建日期”字段中。 示例 2023-10-26T10:00:00Z2023-10-27T14:30:00Z2023-11-15T09:05:00Z | |||
| 发票编号 InvoiceNumber | 每份发票文档的唯一标识符,也是开票流程的主要案例标识符。 | ||
| 说明 发票编号是开票流程分析的核心,从发票创建到最终关闭,唯一标识每张发票。它将审批、发送和付款应用等所有相关活动归入同一个完整案例。 在流程挖掘中,分析每个发票编号的完整历程,可以全面了解整个开票生命周期。这有助于识别流程变体、瓶颈以及偏离标准流程的情况,为优化现金流和运营效率提供关键洞察。 为什么重要 它对于跟踪每张发票的端到端生命周期至关重要,可帮助还原完整开票流程并开展详细的绩效分析。 获取位置 通常对应NetSuite发票交易记录中的“交易ID”或类似唯一标识符字段。 示例 INV-0012345INV-0012346INV-0012347 | |||
| 活动名称 ActivityName | 发票生命周期中特定时间点发生的业务事件名称。 | ||
| 说明 活动名称描述开票流程中的具体步骤或事件,例如“发票已创建”“发票已审批”或“已收到客户付款”。这些活动构成流程图的顺序基础。 分析活动的顺序和频率是流程挖掘的基础。它有助于可视化实际流程,识别常见和少见的流程路径(变体),并定位频繁重复的活动,从而发现返工或低效问题。 为什么重要 该属性是构建流程图的基础,可用于可视化和分析发票经过的不同步骤与路径。 获取位置 根据NetSuite中与发票交易相关的系统日志、状态变更或特定事件记录得出。通常需要将交易状态变更或相关记录创建映射为定义好的活动名称。 示例 发票已创建发票已审批已收到客户付款发票已全额支付 | |||
| 最后数据更新时间 LastDataUpdate | 表示数据最后一次从源系统刷新时间的时间戳。 | ||
| 说明 该属性记录数据集最后更新的时间,为流程挖掘分析的新鲜度和相关性提供背景。 分析人员和业务相关方可以据此判断洞察是否反映最新运营状态。对于任何仪表板或报告而言,这是重要的元数据,可确保决策基于明确数据时效的数据,并避免在数据并非实时的情况下将其误解为实时数据。 为什么重要 它向用户说明数据的新鲜度,帮助用户了解分析的时间范围和洞察的相关性。 获取位置 该时间戳由数据提取工具或数据管道在数据刷新时生成并记录。 示例 2024-05-21T02:00:00Z | |||
| 源系统 SourceSystem | 提取数据的系统。 | ||
| 说明 该属性用于标识流程数据的来源。在此视图中,其值应始终为“NetSuite”。 在更广泛的分析场景中,尤其是组织使用多个ERP或集成系统时,该属性对于数据血缘和治理至关重要。它有助于区分跨不同平台运行的流程,并确保分析结果正确归属于相应的记录系统。 为什么重要 它为数据来源和治理提供关键背景,尤其适用于集成多个系统的环境。 获取位置 这是在数据提取和转换过程中添加的静态值(“NetSuite”)。 示例 NetSuite | |||
| 事件结束时间 EventEndTime | 特定活动或事件完成的精确日期和时间。 | ||
| 说明 事件结束时间标志着活动的完成。许多活动是瞬时完成的,开始和结束时间相同;但审批步骤等活动可能具有可衡量的持续时间。 该属性与事件时间戳(开始时间)结合后,可以直接计算活动处理时间。分析处理时间有助于识别消耗最多时间和资源的具体步骤,并将其与活动之间的等待时间区分开来。这对于定位具体任务中的低效问题至关重要。 为什么重要 它可以精确计算每项活动完成所需的时间,对于分析资源效率和识别耗时任务至关重要。 获取位置 与StartTime类似,该数据可以从NetSuite系统审计轨迹中获取,可能需要通过逻辑将“开始”事件与对应的“结束”事件配对。 示例 2023-10-26T10:05:14Z2023-10-27T14:32:00Z2023-11-15T09:05:00Z | |||
| 到期日 DueDate | 发票付款到期的日期。 | ||
| 说明 到期日根据发票日期和约定的付款条款计算,表示客户在不被视为逾期的情况下完成付款的截止日期。 该属性对于监控应收账款和管理现金流至关重要。它是计算按时付款率KPI和分析客户付款行为的基准。跟踪偏离到期日的情况,有助于识别经常延迟付款的客户,并评估催收策略的有效性。 为什么重要 它对于衡量按时付款绩效和分析客户付款行为至关重要,可直接支持催收和现金流预测。 获取位置 对应NetSuite发票交易记录中的“到期日”(duedate)字段。 示例 2023-11-252023-11-262023-12-15 | |||
| 区域 Region | 与客户或交易相关的地理区域。 | ||
| 说明 Region属性根据地理位置对发票进行分类,可依据客户地址或开具发票的业务单元确定。 这是开展对比分析的重要维度。“Regional Billing Process Comparison”仪表板依靠此属性,对比不同区域的周期时间、错误率和流程变体等KPI。这有助于识别区域间的绩效差异,发现高绩效区域的最佳实践,并推动组织范围内的流程标准化。 为什么重要 它支持不同地理区域之间的对比分析,是识别区域绩效差距和推广最佳实践的关键。 获取位置 这些数据通常存储在NetSuite客户主数据或交易记录的自定义分段或分类字段中。 示例 北美EMEAAPAC | |||
| 发票总金额 InvoiceTotalAmount | 发票的货币总价值,包括税费和其他费用。 | ||
| 说明 该属性表示客户应支付的全部金额,是每个开票案例的基础财务数据。 按发票金额分析流程,可以开展基于价值的分析。例如,识别高价值发票是否比低价值发票经历不同且更复杂的流程。它还可用于确定催收工作的优先级,并了解付款延误或发票错误造成的财务影响。 为什么重要 它支持基于价值的流程分析,帮助确定高价值发票的优先级,并了解流程低效造成的财务影响。 获取位置 这对应于NetSuite中Invoice交易记录的“Total”(总计)字段。 示例 1500.0089.9912500.50 | |||
| 发票日期 InvoiceDate | 发票开具并发送给客户的正式日期。 | ||
| 说明 发票日期或交易日期,是许多开票相关财务计算的起点,通常以此计算付款条款和到期日。 在分析中,该日期是计算应收账款周转天数(DSO)和发票账龄等关键财务KPI的主要基准。它支持群组分析,以比较不同时期的开票绩效,例如环比或同比。 为什么重要 该日期是应收账款周转天数(DSO)和发票账龄等关键财务指标的基准,会直接影响营运资金分析。 获取位置 对应NetSuite发票交易记录中的“日期”(trandate)字段。 示例 2023-10-262023-10-272023-11-15 | |||
| 客户名称 CustomerName | 发票开具对象的客户名称。 | ||
| 说明 此属性用于标识被开票的法人实体或个人,将开票流程与客户关系管理职能关联起来。 按客户分析开票流程,有助于识别特定客户的付款行为、争议或发票复杂度模式。这些信息可用于制定客户细分策略、确定信用额度和设计针对性的催收方式。例如,可以发现某个客户的发票是否经常需要返工。 为什么重要 它支持以客户为中心的分析,帮助识别特定客户的付款模式、常见问题或流程偏差。 获取位置 这对应于NetSuite中Invoice交易记录的“Customer”或“Entity”名称字段。 示例 Global Tech Inc.Innovate Solutions LLCCornerstone Corp | |||
| 是否自动执行 IsAutomated | 用于标识某项活动是否由系统自动执行的标志。 | ||
| 说明 此布尔属性用于区分用户手动执行的活动与系统工作流、脚本或集成自动执行的活动。 此属性是衡量开票流程自动化程度的关键数据,可直接支持“Automated Billing Ratio”KPI。通过筛选自动或手动活动,分析人员可以识别由人工干预造成的瓶颈,发现提升自动化、减少人为错误和提高效率的机会。 为什么重要 它有助于衡量流程自动化程度,识别减少人工投入和提高效率的机会。 获取位置 通常通过检查与活动关联的“User”来确定。由名为“SYSTEM”“Workflow”或“Integration”的用户触发的事件会标记为自动执行。 示例 truefalse | |||
| 用户 User | 执行活动的用户姓名或ID。 | ||
| 说明 该属性用于标识负责执行特定流程步骤的员工或系统用户,例如创建发票、审批发票或应用付款的人员。 按用户分析流程,有助于了解工作量分配、个人绩效和培训需求。通过显示哪些人工活动由最多用户执行,还可以发现潜在的自动化机会。此外,它也是合规和审计轨迹分析的关键属性。 为什么重要 它支持分析工作量分配、用户个人绩效和流程遵循情况,对于资源管理和针对性培训至关重要。 获取位置 可在NetSuite发票及相关交易记录的System Notes子选项卡或特定“修改者”字段中找到。 示例 Alice SmithBob JohnsonSYSTEM | |||
| 付款条款 PaymentTerms | 公司与客户约定的付款条件。 | ||
| 说明 Payment Terms规定客户应在何时以及如何支付发票,例如“Net 30”或“Due on receipt”。系统会根据这些信息自动计算发票到期日。 此属性是“Payment Terms Adherence”仪表板的关键数据。按不同付款条款分析按时付款率,有助于评估条款的有效性。例如,可以比较采用“Net 15”条款的客户是否比采用“Net 30”条款的客户付款更快,为后续合同谈判和信用政策制定提供依据。 为什么重要 它对于分析不同付款条件的有效性及其对客户付款及时性的影响至关重要。 获取位置 这对应于NetSuite中Invoice交易记录的“Terms”字段。 示例 开票后30天付款开票后60天付款收到即付 | |||
| 发票状态 InvoiceStatus | 发票在生命周期中的当前状态。 | ||
| 说明 此属性反映发票的当前状态,例如“Open”“Paid in Full”或“Voided”,用于显示发票在流程中的实时位置。 “Open Invoices Status Overview”仪表板直接基于此属性构建。它支持实时评估应收账款,帮助财务团队监控未结余额、管理催收并预测现金流入。分析最终状态还有助于了解流程结果。 为什么重要 它展示应收账款的当前状态,为监控未结发票和整体开票进度的仪表板提供数据支持。 获取位置 这对应于NetSuite中Invoice交易记录的“Status”字段。 示例 未结已全额支付已作废待审批 | |||
| 应收账款周转天数 DaysSalesOutstanding | 从发票日期到收到付款之间的天数。 | ||
| 说明 Days Sales Outstanding(DSO)是一项关键财务指标,用于衡量发票开具后平均需要多少天才能收款。此属性按单张发票计算,支持详细分析。 DSO通常会汇总为高层级KPI,但保留单张发票级别的DSO可以支持更深入的分析。您可以据此识别DSO最高的客户、区域或发票类型。“DSO Trend”仪表板依靠此指标展示一段时间内的收款效率,为营运资金管理提供重要洞察。 为什么重要 它量化单张发票层面的收款效率,支持分析高DSO的根因及其对现金流的影响。 获取位置 通过用“Customer Payment Received”活动的时间戳减去“InvoiceDate”计算得出。 示例 294562 | |||
| 是否按时付款 IsOnTimePayment | 用于标识客户是否在发票到期日当天或之前完成付款的标志。 | ||
| 说明 此计算得出的布尔标志会比较“Customer Payment Received”活动的时间戳与发票的“DueDate”。如果付款按时或提前完成,则设为true;如果逾期,则设为false。 此属性是“On-Time Payment Rate”KPI和“Payment Terms Adherence”仪表板的基础。它以清晰的二元指标呈现客户付款行为,简化分析和报告,并帮助快速识别付款及时性趋势、评估催收策略的有效性。 为什么重要 它为催收提供清晰的成功指标,直接支持计算On-Time Payment Rate KPI和分析客户行为。 获取位置 这是一个计算属性,需要将付款事件的时间戳与案例级别的“DueDate”属性进行比较。 示例 truefalse | |||
| 是否返工 IsRework | 用于识别被视为返工或纠正循环的活动的计算标志。 | ||
| 说明 对于代表非增值返工的活动,此布尔标志会设为true,例如同一案例中的“Invoice Corrected”或第二次“Invoice Approved”事件。通常根据活动名称或活动重复情况确定。 此属性是“Invoice Rework and Rejection Analysis”仪表板和“Invoice Error Rate”KPI的关键数据。它支持量化返工情况,帮助突出流程质量问题。通过筛选返工活动,团队可以快速识别错误根因,并衡量流程改进措施的影响。 为什么重要 它通过标记低效的返工循环,直接衡量流程质量,并支持分析开票错误的根因及其财务影响。 获取位置 这是在数据转换过程中计算得出的派生属性。系统会应用相应逻辑识别返工,例如标记特定活动名称(“Invoice Corrected”)或重复活动。 示例 truefalse | |||
| 货币 Currency | 发票金额使用的货币代码。 | ||
| 说明 此属性用于指定发票金额的计价货币,例如USD、EUR或GBP。对于所有货币值而言,这是不可或缺的上下文信息。 对于跨国组织,按货币分析有助于了解不同市场的财务表现。这样可以确保正确解读货币值,并在必要时完成货币转换后进行准确汇总和比较。 为什么重要 它为所有货币值提供必要的上下文信息,这对于准确开展财务报告和分析至关重要,尤其适用于跨国运营。 获取位置 这对应于NetSuite中Invoice交易记录的“Currency”字段。 示例 USDEURGBP | |||
| 部门 Department | 与发票相关的内部部门。 | ||
| 说明 此属性表示负责该交易的内部部门,例如Sales、Services或某条业务线,是NetSuite中的标准分类分段。 按部门分析流程,可以开展内部基准比较,并识别哪些部门的开票流程更高效。分析结果还能揭示流程遵循情况或资源配置方面的差异,为组织内部特定部门的流程改进提供依据。 为什么重要 它支持比较不同内部部门的流程绩效,突出差异以及内部流程标准化机会。 获取位置 这对应于“Department”分类字段,可在NetSuite中Invoice交易的抬头级别或行级别设置。 示例 企业销售专业服务硬件 | |||
| 销售订单号 SalesOrderNumber | 生成发票的销售订单标识符。 | ||
| 说明 此属性可直接追溯至源销售订单,将开票流程与前置的销售和履约流程关联起来。 纳入Sales Order Number后,可以更完整地了解整个Order-to-Cash周期,并追溯开票问题在销售流程中的源头。例如,频繁的发票更正可能与特定类型销售订单中的数据录入错误有关。 为什么重要 它将开票流程追溯至销售流程,支持更广泛的端到端Order-to-Cash分析,从而识别开票问题的根因。 获取位置 可在NetSuite中Invoice交易的“Created From”字段或“Related Records”子选项卡中找到。 示例 SO-0009876SO-0009877SO-0009878 | |||
订单到收款-开票与发票处理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 发票已全额支付 | 发票状态已变更为“已全额支付”,表示余额现为零。这是该发票开票与收款周期的成功结束。 | ||
| 为什么重要 这是流程的主要成功结束事件。分析达到该状态所需的总时间,可以得出现金转换周期的端到端周期时间。 获取位置 根据发票记录中的“状态”字段变更为“已全额支付”推断。该状态变更的时间戳可在交易系统备注中找到。 采集 根据系统备注中“状态”字段变更为“已全额支付”推断。 事件类型 inferred | |||
| 发票已创建 | 表示发票交易记录已在NetSuite中正式创建。对于每个唯一发票编号,这是开票流程的起点,事件信息取自交易记录的创建时间戳。 | ||
| 为什么重要 这是开票流程的主要开始事件。分析该事件与其他事件之间的时间,可以了解整体流程效率,并为“发票生成周期时间”KPI建立基线。 获取位置 取自发票交易记录中的“创建日期”时间戳。NetSuite的发票系统备注也会明确记录创建事件和操作用户。 采集 发票交易记录创建时记录的事件。 事件类型 explicit | |||
| 发票已发送给客户 | 表示发票已发送给客户,通常通过电子邮件发送。通过跟踪用户在发票记录中执行“电子邮件”操作的时间,可以捕获此事件。 | ||
| 为什么重要 这标志着客户收款周期的开始,也是计算应收账款周转天数(DSO)的主要起点。 获取位置 根据发票记录中的“最后发送电子邮件日期”字段被填充推断。也可以通过Communication子选项卡下电子邮件消息记录的创建来捕获。 采集 根据“最后发送电子邮件日期”字段被填充或Communication记录创建推断。 事件类型 inferred | |||
| 发票已审批 | 发票已正式审批,可以发送给客户。当审批状态通常通过工作流操作从“待审批”更新为“已审批”时,会捕获此事件。 | ||
| 为什么重要 这是阻止发票发送给客户的关键里程碑,对于衡量审批周期时间和计算“自动化开票比例”KPI至关重要。 获取位置 根据发票记录中的“审批状态”字段变更为“已审批”推断。精确时间戳记录在交易的系统备注中。 采集 根据系统备注中“审批状态”字段变更为“已审批”推断。 事件类型 inferred | |||
| 已收到客户付款 | 已收到客户付款并记录在系统中。通过在NetSuite中创建“客户付款”交易捕获此事件,该付款可能应用于一张或多张发票。 | ||
| 为什么重要 标志着现金已收到,但不一定已应用于特定发票。这是现金核销流程的第一步,也是计算DSO的关键事件。 获取位置 取自“客户付款”交易记录的创建日期。通过付款记录的“应用”子选项卡建立与发票的关联。 采集 创建客户付款交易记录。 事件类型 explicit | |||
| 付款已应用于发票 | 收到的客户付款已明确应用于此发票,减少其应付金额。当在客户付款记录中保存应用信息时,会记录此事件。 | ||
| 为什么重要 这是现金收款与发票结清之间的关键连接。从“收到付款”到此事件的持续时间定义了“现金核销周期时间”KPI。 获取位置 从客户付款交易的系统备注或审计轨迹中捕获,具体是在保存应用到发票行的信息时记录。该应用操作的时间戳至关重要。 采集 客户付款记录保存并应用于发票时记录。 事件类型 explicit | |||
| 发票已作废 | 发票已作废,交易被取消,任何总账影响也会被冲销。通常在发票错误创建且尚未付款时执行此操作。 | ||
| 为什么重要 表示流程异常和终止状态。了解发票作废原因,可以发现需要在上游纠正的数据录入或流程错误。 获取位置 这是明确的用户操作。可以从发票记录的系统备注中捕获,该备注会记录交易何时被作废以及由谁执行。 采集 发票系统备注中记录的明确“作废”操作。 事件类型 explicit | |||
| 发票已关闭 | 发票交易已关闭,通常作为期末会计流程的一部分。发票完成付款和核对后,此操作可防止交易继续被修改。 | ||
| 为什么重要 虽然通常发生在“已全额支付”之后,但这可能是最后的管理步骤。分析付款与关闭之间的延误,可能有助于改善财务报告的及时性。 获取位置 根据“状态”字段变更为“已关闭”或类似状态推断。该变更的时间戳取自系统备注。 采集 根据系统备注中的“状态”字段变更推断。 事件类型 inferred | |||
| 发票已提交审批 | 表示发票状态变更为“待审批”。当用户将发票提交至已配置的审批工作流时,会捕获此事件,这也是常见的定制方式。 | ||
| 为什么重要 此活动标志着潜在审批瓶颈的开始。等待审批所花费的时间,是发票整体处理周期时间的重要组成部分。 获取位置 根据发票记录中的“审批状态”字段变更为“待审批”推断。该变更的时间戳可在发票系统备注的审计轨迹中找到。 采集 根据系统备注中记录的“审批状态”字段变更推断。 事件类型 inferred | |||
| 已到付款到期日 | 当当前日期与发票到期日一致时发生的计算事件。该事件不对应直接的用户或系统操作,而是在分析期间根据现有数据推导得出。 | ||
| 为什么重要 这是衡量付款及时性的关键基准,对于计算“按时付款率”KPI和分析客户付款行为至关重要。 获取位置 这不是NetSuite中的显式事件,而是通过比较事件日志时间戳与发票交易记录中的“到期日”字段计算得出。 采集 事件时间戳等于发票“到期日”字段时计算得出。 事件类型 calculated | |||
| 已发出付款提醒 | 已向客户发送有关未付款项的沟通信息。该事件通常记录为从发票记录或客户记录发送的活动或电子邮件,往往由催收解决方案执行。 | ||
| 为什么重要 这是评估催收策略有效性的关键。分析该活动对后续付款的影响,有助于优化提醒频率和时间。 获取位置 根据发票或客户记录Communication>Messages子选项卡中电子邮件记录的创建捕获。自动催收解决方案也可能将其记录为自定义记录或任务。 采集 作为与发票关联的电子邮件或活动记录记录。 事件类型 explicit | |||
| 贷项通知单已创建 | 已创建并应用贷项通知单交易,减少未结余额。这通常表示产品退货、服务投诉或价格更正。 | ||
| 为什么重要 突出显示返工、质量问题或客户争议。频繁发生可能表明存在潜在问题,也是“发票返工与拒绝分析”仪表板的重要内容。 获取位置 根据贷项通知单交易的创建捕获。与原始发票的关联可在“创建来源”字段或贷项通知单的“应用”子选项卡中找到。 采集 创建与原始发票关联的贷项通知单记录。 事件类型 explicit | |||
数据提取指南
步骤
- 登录NetSuite:使用具有足够权限的角色访问NetSuite账户,以便在交易记录上创建和运行Saved Searches。
- 进入Saved Searches:依次进入Reports > Saved Searches > All Saved Searches > New。从搜索类型列表中选择“Transaction”。这将作为创建多个搜索的基础,每种事件类型对应一个搜索。
- 创建“发票已创建”搜索:这是用于捕获发票创建事件的主要搜索。
- 在“Criteria”选项卡的“Standard”部分,将“Type”筛选条件设置为“is Invoice”。
- 添加“Main Line”筛选条件,并将其设置为“is true”,以确保每张发票仅返回一条记录。
- 在“Results”选项卡中添加所需列。使用公式创建标准化字段,例如“ActivityName”。例如,添加“Formula (Text)”字段,并使用公式
_UTF8'Invoice Created'。
- 创建状态变更搜索(审批、已付款、已作废、已关闭):许多活动属于状态变更。通过System Notes捕获精确时间戳是最可靠的方法。
- 创建新的Transaction Saved Search。
- 在“Criteria”选项卡中,将“Type”设置为“is Invoice”。
- 在“Standard”子选项卡下,添加“System Notes : Field”筛选条件,并选择相关状态字段,例如“Approval Status”。
- 添加“System Notes : New Value”筛选条件,并将其设置为目标状态,例如“Approved”。
- 在“Results”选项卡中,将“System Notes : Date”映射到
EventTimestamp,将“System Notes : Set by”映射到“用户”。 - 对以下每项基于状态的活动重复此过程:“发票已提交审批”“发票已批准”“发票已全额支付”“发票已作废”和“发票已关闭”,并相应调整字段和值筛选条件。
- 创建“发票已发送给客户”搜索:通常通过跟踪从发票记录发送的电子邮件来捕获此事件。
- 创建新的Transaction Saved Search,并将“Type”设置为“is Invoice”。
- 在“Criteria”选项卡的“Related Records”部分,添加“Messages : Date Sent”筛选条件,并将其设置为“is not empty”。
- 在“Results”选项卡中,将“Messages : Date Sent”映射到
EventTimestamp,将“Messages : Author”映射到“用户”。
- 创建付款和贷项通知单活动搜索:这些活动涉及与发票关联的独立交易类型。
- 对于“已收到客户付款”,创建“Type”为“Customer Payment”的搜索,并将创建日期作为事件时间戳。
- 对于“付款已应用于发票”,使用相同的“Customer Payment”搜索,但关联“Applied To Transaction”字段。付款交易的“Date Created”作为时间戳。每次发票应用将返回一行记录。
- 对于“贷项通知单已创建”,创建“Type”为“Credit Memo”的搜索,并关联“Created From”字段,以获取原始发票编号。
- 运行并导出每个Saved Search:执行创建的每个Saved Search。在结果页面点击导出图标(CSV、Excel或PDF),然后选择CSV。如果结果集超过NetSuite导出限制,可能需要分批导出。
- 合并并转换数据:使用Microsoft Excel、Python脚本或数据准备工具,将所有导出的CSV文件合并为一个文件。
- 推导“已到付款到期日”事件:在合并后的数据文件中,为每个“发票已创建”事件新增一行。将
ActivityName设置为“已到付款到期日”,将EventTimestamp设置为发票DueDate字段的值,并复制其他相关发票属性。 - 完成事件日志:将所有列标题标准化为所需架构(例如
InvoiceNumber、ActivityName、EventTimestamp)。确保时间戳格式一致。为本次提取批次添加包含固定值的SourceSystem和LastDataUpdate列。将最终合并文件保存为CSV,以便上传。
配置
- **前提条件:**需要使用具有创建、编辑和运行“Transaction”类型Saved Searches权限的用户角色。同时还必须具备查看Invoice、Customer Payment、Credit Memo和System Notes记录的权限。
- **搜索类型:**所有提取使用的主要搜索类型是“Transaction”。该类型可访问所需的全部记录及其关联关系。
- **日期范围筛选:**为控制性能和数据量,应为每个搜索设置日期范围筛选。初次分析建议将“Date Created”筛选为最近3至6个月。
- **Main Line筛选:**对于“Invoice Created”等单据头级别的事件,将“Main Line”条件设为“true”。如需分析行项目明细,则设为“false”,但本流程不需要分析行项目明细。
- **System Notes:**捕获状态变更高度依赖System Notes。请确保已在NetSuite配置中启用关键交易字段(如“Status”和“Approval Status”)的审计功能(Setup > Company > Enable Features > SuiteCloud > SuiteAudit Trail)。
- **性能注意事项:**在较大日期范围内运行包含多个关联和公式字段的复杂搜索时,NetSuite界面可能响应较慢。建议在业务低峰期运行并导出这些搜索。如果搜索超时,请缩小日期范围,并分批导出数据。
a 示例查询 sql
/*
This section describes the configuration for multiple NetSuite Saved Searches needed to generate the complete event log. Each block represents a separate Saved Search that must be created in the UI, exported, and then combined externally.
*/
-- Search 1: Invoice Created
Activity Name: 'Invoice Created'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Main Line is true
Results Columns (Mapped to Event Log Attributes):
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Created'
- EventTimestamp: Date Created
- User: Created By
- InvoiceDate: Date
- DueDate: Due Date
- InvoiceTotalAmount: Amount (Gross)
- CustomerName: Name
-- Search 2: Invoice Submitted for Approval
Activity Name: 'Invoice Submitted for Approval'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Pending Approval' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Submitted for Approval'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 3: Invoice Approved
Activity Name: 'Invoice Approved'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Approved' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Approved'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 4: Invoice Sent to Customer
Activity Name: 'Invoice Sent to Customer'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Messages : Date Sent is not empty
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Sent to Customer'
- EventTimestamp: Messages : Date Sent (use Maximum summary type if multiple)
- User: Messages : Author (use Maximum summary type)
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 5: Payment Reminder Issued
Activity Name: 'Payment Reminder Issued'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- User Notes : Note contains [Your dunning/reminder keyword]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Payment Reminder Issued'
- EventTimestamp: User Notes : Date
- User: User Notes : Author
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 6: Credit Memo Created
Activity Name: 'Credit Memo Created'
Saved Search Type: Transaction
Criteria:
- Type is Credit Memo
- Main Line is true
Results Columns:
- InvoiceNumber: Created From : Document Number
- ActivityName: Formula (Text) = 'Credit Memo Created'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 7: Customer Payment Received
Activity Name: 'Customer Payment Received'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is true
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Customer Payment Received'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 8: Payment Applied To Invoice
Activity Name: 'Payment Applied To Invoice'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is false
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Payment Applied To Invoice'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 9: Invoice Paid In Full
Activity Name: 'Invoice Paid In Full'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value is Paid In Full
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Paid In Full'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 10: Invoice Voided
Activity Name: 'Invoice Voided'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Status is Invoice : Voided
- System Notes : Field is Status
- System Notes : New Value is Voided
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Voided'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
-- Search 11: Invoice Closed
Activity Name: 'Invoice Closed'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value contains Closed
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Closed'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Event to be Derived Post-Extraction: Payment Due Date Reached
/*
This event is not extracted directly. After combining all other CSVs, create a new row for each unique invoice.
Set ActivityName to 'Payment Due Date Reached'.
Set EventTimestamp to the DueDate value from the 'Invoice Created' event for that invoice.
Copy other attributes like InvoiceNumber, CustomerName, etc.
*/ 步骤
- **前提条件:启用SuiteAnalytics Connect:**确保NetSuite实例已购买并启用SuiteAnalytics Connect模块。通常由NetSuite管理员在Setup > Company > Enable Features > Analytics下完成。
- **下载并配置ODBC驱动程序:**进入NetSuite主页仪表板,找到“Settings”Portlet。点击“Set Up SuiteAnalytics Connect”链接,根据操作系统下载相应的ODBC驱动程序。按照NetSuite提供的安装说明完成驱动程序安装和配置,并填写服务主机、端口、Account ID、Role ID、电子邮件和密码。
- **建立数据库连接:**使用支持ODBC连接的SQL客户端工具,例如DBeaver、Tableau或Power BI。使用上一步配置的驱动程序创建新的ODBC连接。测试连接,确保能够成功完成身份验证并访问NetSuite只读副本数据库。
- **准备SQL查询:**复制本文档“Query”部分提供的完整SQL查询。该查询用于提取Order to Cash计费流程所需的全部活动和属性。
- **设置查询参数:**执行前,找到查询中的占位值。将
'YYYY-MM-DD'替换为所需提取期间的开始和结束日期。同时,将[Your Subsidiary ID]替换为要分析的NetSuite子公司内部ID。 - **执行查询:**在SQL客户端中运行修改后的查询。执行时间取决于日期范围以及NetSuite账户中的交易量。
- **检查结果:**查询完成后,系统将返回一张代表事件日志的扁平表。每一行对应发票生命周期中的一项具体活动。请检查数据是否完整、准确。
- **导出事件日志:**将查询结果从SQL客户端导出为CSV文件。确保文件采用UTF-8编码,以避免字符显示问题。
- **准备上传:**上传到流程挖掘工具前,确认列标题与所需属性名称一致,例如InvoiceNumber、ActivityName和EventTimestamp。检查日期和时间格式是否统一。
配置
- **SuiteAnalytics Connect许可证:**访问NetSuite只读副本数据库必须拥有有效的SuiteAnalytics Connect模块许可证。没有该许可证,无法直接访问SQL。
- **专用角色和用户:**强烈建议创建专用于SuiteAnalytics Connect的NetSuite角色,并授予适当权限。该角色应对所需记录(包括Transactions、Customers和System Notes)拥有只读权限。为该角色分配专用用户进行数据提取,以确保安全性和可审计性。
- **日期范围筛选:**提供的查询在发票创建日期(
Transaction.TRANDATE)上包含WHERE子句。初次提取建议从较小的日期范围开始,例如最近3至6个月,以控制性能和数据量。例如:AND T.TRANDATE BETWEEN '2023-01-01' AND '2023-06-30'。 - **子公司筛选:**对于包含多个子公司的账户,按具体子公司筛选对性能和数据相关性都至关重要。查询包含占位条件
WHERE T.SUBSIDIARY_ID = [Your Subsidiary ID],需要根据实际情况配置。 - **数据时效性:**SuiteAnalytics Connect数据库是只读副本。数据通常每小时刷新多次,但并非实时数据。请注意,NetSuite中发生交易到该交易出现在Connect数据库之间,可能存在最长数小时的延迟。
a 示例查询 sql
WITH Invoices AS (
SELECT
T.TRANSACTION_ID,
T.TRANID AS InvoiceNumber,
T.TRANDATE AS InvoiceDate,
T.DUEDATE AS DueDate,
T.FOREIGN_TOTAL AS InvoiceTotalAmount,
C.COMPANYNAME AS CustomerName,
BUILTIN.DF(C.LOCATION) AS Region,
T.CREATED_DATE AS InvoiceCreationDate,
CREATOR.FIRST_NAME || ' ' || CREATOR.LAST_NAME AS CreatorUser
FROM
TRANSACTIONS T
JOIN
CUSTOMERS C ON T.ENTITY_ID = C.CUSTOMER_ID
LEFT JOIN
EMPLOYEES CREATOR ON T.CREATED_BY_ID = CREATOR.EMPLOYEE_ID
WHERE
T.TRANSACTION_TYPE = 'Invoice'
AND T.TRANDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD')
-- AND T.SUBSIDIARY_ID = [Your Subsidiary ID] -- Add your subsidiary filter if needed
)
-- 1. Invoice Created
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Created' AS "ActivityName",
I.InvoiceCreationDate AS "EventTimestamp",
I.InvoiceCreationDate AS "EventEndTime",
I.CreatorUser AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN I.CreatorUser LIKE '%System%' THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
UNION ALL
-- 2. Invoice Submitted for Approval & 3. Invoice Approved
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE WHEN SN.NEW_VALUE = 'Pending Approval' THEN 'Invoice Submitted for Approval' ELSE 'Invoice Approved' END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
SN.FIELD = 'TRANSACTION.APPROVALSTATUS' AND SN.NEW_VALUE IN ('Pending Approval', 'Approved')
UNION ALL
-- 4. Invoice Sent to Customer
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Sent to Customer' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' -- Indicates an outgoing message
UNION ALL
-- 5. Payment Due Date Reached
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Due Date Reached' AS "ActivityName",
I.DueDate AS "EventTimestamp",
I.DueDate AS "EventEndTime",
'System' AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
1 AS "IsAutomated"
FROM
Invoices I
WHERE
I.DueDate IS NOT NULL AND I.DueDate < SYSDATE
UNION ALL
-- 6. Payment Reminder Issued (based on Messages table, requires a specific subject line convention)
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Reminder Issued' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN M.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' AND UPPER(M.SUBJECT) LIKE '%PAYMENT REMINDER%'
UNION ALL
-- 7. Credit Memo Created & Applied
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Credit Memo Created' AS "ActivityName",
CM.CREATED_DATE AS "EventTimestamp",
CM.CREATED_DATE AS "EventEndTime",
CM_CREATOR.FIRST_NAME || ' ' || CM_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS CM ON T_LINES.TRANSACTION_ID = CM.TRANSACTION_ID
LEFT JOIN
EMPLOYEES CM_CREATOR ON CM.CREATED_BY_ID = CM_CREATOR.EMPLOYEE_ID
WHERE
CM.TRANSACTION_TYPE = 'Credit Memo'
UNION ALL
-- 8. Customer Payment Received & 9. Payment Applied to Invoice
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Customer Payment Received' AS "ActivityName", -- Can also create a separate 'Payment Applied' event if needed
PAYMENT.CREATED_DATE AS "EventTimestamp",
PAYMENT.CREATED_DATE AS "EventEndTime",
PMT_CREATOR.FIRST_NAME || ' ' || PMT_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS PAYMENT ON T_LINES.TRANSACTION_ID = PAYMENT.TRANSACTION_ID
LEFT JOIN
EMPLOYEES PMT_CREATOR ON PAYMENT.CREATED_BY_ID = PMT_CREATOR.EMPLOYEE_ID
WHERE
PAYMENT.TRANSACTION_TYPE = 'Customer Payment'
UNION ALL
-- 10. Invoice Paid In Full, 11. Invoice Voided, 12. Invoice Closed
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE
WHEN SN.NEW_VALUE_ID = 'Invoice:B' THEN 'Invoice Paid In Full' -- 'B' is status 'Paid In Full'
WHEN SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Voided'
WHEN SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Closed'
END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
(SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE_ID = 'Invoice:B')
OR (SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T')
OR (SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T'); 立即优化您的NetSuite开票与账单流程,加快现金流周转
将NetSuite开票周期时间缩短30%,改善现金流。
无需信用卡,几分钟即可完成设置。