您的订单到收款:开票与发票处理数据模板
您的订单到收款:开票与发票处理数据模板
- 建议收集的属性
- 需要跟踪的关键活动
- 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 | |||
| 发票总金额 InvoiceTotalAmount | 发票的货币总额,包括税费和其他费用。 | ||
| 说明 此属性表示客户应付的全部金额,是每个账单案例的基础财务数据。 按发票金额分析流程,可开展基于金额的分析。例如,可以发现高金额发票的处理流程是否比低金额发票更复杂。此属性还可用于确定催收工作的优先级,并了解付款延迟或发票错误造成的财务影响。 重要性 此属性支持基于金额的流程分析,有助于优先处理高金额发票,并了解流程低效造成的财务影响。 获取途径 对应NetSuite发票交易记录中的“总计”(total)字段。 示例 1500.0089.9912500.50 | |||
| 发票日期 InvoiceDate | 发票开具给客户时的正式日期。 | ||
| 说明 发票日期(或交易日期)是许多账单相关财务计算的起点,通常以此日期计算付款期限和到期日。 在分析中,此日期是计算应收账款周转天数(DSO)和发票账龄等关键财务KPI的主要基准。它还支持群组分析,可比较不同时期的账单绩效,例如环比或同比。 重要性 此日期是应收账款周转天数(DSO)和发票账龄等关键财务指标的基准,直接影响营运资金分析。 获取途径 对应NetSuite发票交易记录中的“日期”(trandate)字段。 示例 2023-10-262023-10-272023-11-15 | |||
| 地区 Region | 与客户或交易相关的地理区域。 | ||
| 说明 地区属性根据地理位置对发票进行分类,数据可取自客户地址或开具发票的业务单元。 此属性是重要的比较维度。“区域账单流程比较”仪表板依靠此属性,比较不同地区的周期时间、错误率和流程变体等KPI。这有助于发现地区间的绩效差异、总结表现较好地区的最佳实践,并推动组织范围内的流程标准化。 重要性 此属性支持不同地理区域之间的比较分析,对于发现地区绩效差距和推广最佳实践至关重要。 获取途径 此数据通常存储在NetSuite客户主记录或交易记录的自定义分类或分类字段中。 示例 北美欧洲、中东和非洲亚太地区 | |||
| 客户名称 CustomerName | 发票开具对象的客户名称。 | ||
| 说明 此属性用于标识被开票的法人实体或个人,将账单流程与客户关系管理联系起来。 按客户分析账单流程,有助于发现特定客户的付款行为、争议或发票复杂度等规律,为客户细分、信用额度决策和定制化催收策略提供依据。例如,可以发现某个客户的发票是否经常需要返工。 重要性 此属性支持以客户为中心的分析,有助于识别特定客户的付款模式、常见问题或流程偏差。 获取途径 对应NetSuite发票交易记录中的“客户”或“实体”名称字段。 示例 Global Tech Inc.Innovate Solutions LLCCornerstone Corp | |||
| 是否自动执行 IsAutomated | 标记某项活动是否由系统自动执行。 | ||
| 说明 此布尔属性用于区分用户手动执行的活动与系统工作流、脚本或集成自动执行的活动。 此属性是衡量开票流程自动化水平的关键,可直接用于计算“自动开票比例”KPI。通过筛选自动或手动执行的活动,分析人员可以找出由人工干预造成的瓶颈,并确定提升自动化、减少人为错误和提高效率的机会。 重要性 此属性有助于衡量流程的自动化水平,发现减少人工操作、提高效率的机会。 获取途径 通常可通过检查活动关联的“User”来判断。由名为“SYSTEM”“Workflow”或“Integration”的用户触发的事件会标记为自动执行。 示例 truefalse | |||
| 用户 User | 执行活动的用户姓名或ID。 | ||
| 说明 此属性用于标识负责执行特定流程步骤的员工或系统用户,例如创建发票、审批发票或核销付款的人员。 按用户分析流程有助于了解工作量分布和个人绩效,并识别培训需求。通过查看哪些人工活动由最多用户执行,也可以发现潜在的自动化机会。此属性对于合规和审计轨迹分析同样重要。 重要性 此属性有助于分析工作量分布、用户绩效和流程执行情况,对于资源管理和有针对性的培训至关重要。 获取途径 可在NetSuite的“系统备注”子选项卡中,或发票及相关交易记录的特定“修改者”字段中找到。 示例 Alice SmithBob JohnsonSYSTEM | |||
| 付款条款 PaymentTerms | 公司与客户约定的付款条件。 | ||
| 说明 付款条款规定客户应在何时以及如何支付发票,例如“净30天”或“收到即付”。系统会根据此信息自动计算发票到期日。 此属性对于“付款条款执行情况”仪表板至关重要。按不同付款条款分析按时付款率,有助于评估条款效果。例如,可以比较采用“净15天”和“净30天”条款的客户付款速度,为后续合同谈判和信用政策提供依据。 重要性 此属性对于分析不同付款条件的效果及其对客户付款及时性的影响至关重要。 获取途径 对应NetSuite发票交易记录中的“条款”字段。 示例 净30天净60天收到即付 | |||
| 发票状态 InvoiceStatus | 发票生命周期中的当前状态。 | ||
| 说明 此属性反映发票当前状态,例如“未结”“已全额付清”或“已作废”,可随时显示发票在流程中的位置。 “未结发票状态概览”仪表板直接基于此属性构建,可实时查看应收账款,帮助财务团队监控未结余额、管理催收并预测现金流入。分析最终状态也有助于了解流程结果。 重要性 此属性可呈现应收账款的当前状态,支持构建监控未结发票和整体账单进度的仪表板。 获取途径 对应NetSuite发票交易记录中的“状态”字段。 示例 未结已全额付清已作废待审批 | |||
| 币种 Currency | 发票金额所用的币种代码。 | ||
| 说明 此属性用于指定发票金额的币种,例如USD、EUR或GBP,是理解所有货币金额所必需的背景信息。 对于跨国组织,按币种分析有助于了解不同市场的财务表现,确保正确解读金额,并在必要时完成币种换算后进行汇总和比较。 重要性 此属性为所有货币金额提供必要背景信息,对于准确编制财务报告和开展分析至关重要,尤其适用于跨国运营。 获取途径 对应NetSuite发票交易记录中的“币种”字段。 示例 USDEURGBP | |||
| 应收账款周转天数 DaysSalesOutstanding | 发票日期与收到付款日期之间的天数。 | ||
| 说明 应收账款周转天数(DSO)是重要的财务指标,用于衡量开具发票后平均需要多少天才能收款。此属性按单张发票计算,便于深入分析。 DSO通常作为高层级KPI汇总,但在单张发票级别保留DSO数据也有助于深入分析。您可以据此找出DSO最高的客户、地区或发票类型。“DSO趋势”仪表板利用此指标展示收款效率随时间的变化,为营运资金管理提供重要依据。 重要性 此属性量化单张发票的收款效率,便于深入分析DSO偏高的根因及其对现金流的影响。 获取途径 用“已收到客户付款”活动的时间戳减去“InvoiceDate”计算得出。 示例 294562 | |||
| 是否按时付款 IsOnTimePayment | 标记客户是否在发票到期日当天或之前付款。 | ||
| 说明 此布尔计算字段会比较“已收到客户付款”活动的时间戳与发票的“DueDate”。按时或提前付款时设为true,逾期付款时设为false。 此属性是“按时付款率”KPI和“付款条款遵循情况”仪表板的基础,可清晰呈现客户付款行为,简化分析和报告。借助此属性,您可以快速发现付款及时性的趋势,并评估催收策略的效果。 重要性 此属性为催收效果提供了清晰的衡量指标,可直接用于计算按时付款率KPI和分析客户行为。 获取途径 这是一个计算属性,需要将付款事件的时间戳与案例级别的“DueDate”属性进行比较。 示例 truefalse | |||
| 是否返工 IsRework | 用于标记返工或纠正循环的计算字段。 | ||
| 说明 对于代表非增值返工的活动,此布尔标记设为true,例如“发票已更正”或同一案例中第二次出现“发票已批准”事件。通常根据活动名称或活动是否重复来计算。 此属性是“发票返工与拒绝分析”仪表板和“发票错误率”KPI的重要依据,可轻松量化返工情况,帮助发现流程质量问题。筛选返工活动后,团队可以快速找出错误根因,并衡量流程改进举措的成效。 重要性 此属性通过标记低效的返工循环,直接衡量流程质量,便于分析开票错误的根因及其财务影响。 获取途径 这是数据转换期间计算得出的属性。系统会根据活动名称(例如“发票已更正”)或活动重复情况识别并标记返工。 示例 truefalse | |||
| 部门 Department | 与发票关联的内部部门。 | ||
| 说明 此属性表示负责该交易的内部部门,例如销售、服务或特定业务线。这是NetSuite中的标准分类字段。 按部门分析流程有助于进行内部对标,并判断某些部门的开票流程是否比其他部门更高效。分析结果可以揭示流程遵循情况或资源分配方面的差异,为组织内特定部门的流程改进提供依据。 重要性 此属性可用于比较不同内部部门的流程绩效,发现差异和内部流程标准化的机会。 获取途径 对应“Department”分类字段,可在NetSuite发票交易的抬头或明细行级别设置。 示例 企业销售专业服务硬件 | |||
| 销售订单编号 SalesOrderNumber | 生成发票所依据的销售订单标识。 | ||
| 说明 此属性可直接关联原始销售订单,将账单流程与前序销售和履约流程连接起来。 纳入销售订单编号后,可以更全面地了解整个订单到收款周期,并追溯账单问题在销售流程中的源头。例如,频繁更正发票可能与特定类型销售订单中的数据录入错误有关。 重要性 此属性将账单流程与销售流程关联起来,支持更全面的订单到收款端到端分析,帮助查明账单问题的根本原因。 获取途径 可在NetSuite发票交易的“Created From”字段或“Related Records”子选项卡中找到。 示例 SO-0009876SO-0009877SO-0009878 | |||
订单到收款:开票与发票处理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 发票已全额付清 | 发票状态已变为“已全额付清”,表示余额为零。这标志着该发票的账单与催收周期顺利结束。 | ||
| 重要性 这是流程顺利结束的主要结束事件。分析达到此状态所需的总时间,可得出现金转换周期的端到端周期时间。 获取途径 根据发票记录中的“状态”字段变为“已全额付清”推断。交易系统备注中可查到状态变更的时间戳。 采集 根据系统备注中“状态”字段变为“已全额付清”推断。 事件类型 inferred | |||
| 发票已创建 | 表示NetSuite中正式创建了发票交易记录。此事件是每个唯一发票编号对应账单流程的起点,依据交易创建时间戳记录。 | ||
| 重要性 这是账单流程的主要开始事件。分析此事件与其他事件之间的时间,可了解整体流程效率,并为发票生成周期时间KPI提供基准。 获取途径 取自发票交易记录的“创建日期”时间戳。NetSuite的发票系统备注也会明确记录创建事件和操作用户。 采集 创建发票交易记录时记录的事件。 事件类型 explicit | |||
| 发票已发送给客户 | 表示发票已发送给客户,通常通过电子邮件发送。跟踪用户在发票记录中执行“电子邮件”操作的时间,即可记录此事件。 | ||
| 重要性 这标志着客户付款期限的开始,也是计算应收账款周转天数(DSO)的主要起点。 获取途径 根据发票记录中是否填写“上次发送电子邮件日期”字段推断。也可以根据“通信”子选项卡下电子邮件消息记录的创建时间记录。 采集 根据“上次发送电子邮件日期”字段是否填写,或通信记录的创建情况推断。 事件类型 inferred | |||
| 发票已批准 | 发票已正式批准,可以发送给客户。审批状态从“待审批”更新为“已批准”时会记录此事件,通常由工作流操作触发。 | ||
| 重要性 这是发票发送给客户前的关键节点。该事件对于衡量审批周期时间和计算“账单自动化率”KPI至关重要。 获取途径 根据发票记录中的“审批状态”字段变为“已批准”推断。交易系统备注会记录准确的时间戳。 采集 根据系统备注中“审批状态”字段变为“已批准”推断。 事件类型 inferred | |||
| 已收到客户付款 | 已收到客户付款并将其记录在系统中。NetSuite中创建“客户付款”交易时会记录此事件,该付款可能对应一张或多张发票。 | ||
| 重要性 此事件表示已收到现金,但不一定已将其核销到具体发票。这是现金核销流程的第一步,也是计算DSO的重要事件。 获取途径 取自“客户付款”交易记录的创建日期。付款与发票的关联信息位于付款记录的“应用”子选项卡中。 采集 创建客户付款交易记录。 事件类型 explicit | |||
| 付款已核销至发票 | 收到的客户付款已明确核销至此发票,从而减少应付金额。在客户付款记录中保存核销信息时会记录此事件。 | ||
| 重要性 这是连接现金收款与发票结清的关键环节。从“收到付款”到此事件的时长即为“现金核销周期时间”KPI。 获取途径 从客户付款交易的系统备注或审计轨迹中获取,具体为保存发票行核销信息的时间。核销时间戳是关键数据。 采集 保存客户付款记录并将付款核销至发票时记录。 事件类型 explicit | |||
| 发票已作废 | 发票已作废,交易随之取消,相关总账影响也会冲销。通常在发票尚未付款且因错误而创建时执行此操作。 | ||
| 重要性 此事件表示流程异常和终止状态。了解发票作废的原因,有助于发现并纠正上游的数据录入或流程错误。 获取途径 这是明确的用户操作。发票记录的系统备注会记录交易作废的时间和操作用户,可据此捕获此事件。 采集 发票系统备注中记录的明确“作废”操作。 事件类型 explicit | |||
| 发票已关闭 | 发票交易已关闭,通常属于期末会计处理的一部分。交易全额付清并完成对账后,此操作可防止进一步修改交易。 | ||
| 重要性 此操作通常发生在“已全额付清”之后,也可能是最后的行政步骤。分析付款与关闭之间的延迟,有助于了解其对财务报告时效性的影响。 获取途径 根据“状态”字段变为“已关闭”或类似状态推断。此变更的时间戳取自系统备注。 采集 根据系统备注中的“状态”字段变更推断。 事件类型 inferred | |||
| 发票已提交审批 | 表示发票状态变为“待审批”。用户将发票提交至已配置的审批工作流时会记录此事件,这通常属于自定义配置。 | ||
| 重要性 此活动标志着潜在审批瓶颈的开始。等待审批所花费的时间是发票处理总周期时间的重要组成部分。 获取途径 根据发票记录中的“审批状态”字段变为“待审批”推断。此变更的时间戳可在发票系统备注的审计轨迹中查到。 采集 根据系统备注中记录的“审批状态”字段变更推断。 事件类型 inferred | |||
| 已创建贷项通知单 | 已创建贷项通知单交易并将其应用于发票,从而减少未结余额。这通常表示发生了产品退货、服务投诉或价格更正。 | ||
| 重要性 此事件反映返工、质量问题或客户争议。频繁发生可能意味着存在深层问题,也是“发票返工与拒收分析”仪表板的重要依据。 获取途径 根据贷项通知单交易的创建情况记录。原发票的关联信息可在“创建来源”字段或贷项通知单的“应用”子选项卡中查到。 采集 创建与原发票关联的贷项通知单记录。 事件类型 explicit | |||
| 已到付款到期日 | 当当前日期与发票到期日一致时触发的计算事件。此事件不对应直接的用户或系统操作,而是在分析期间根据现有数据推导得出。 | ||
| 重要性 这是衡量付款是否及时的重要基准,对于计算“按时付款率”KPI和分析客户付款行为至关重要。 获取途径 NetSuite中没有对应的明确事件。此事件通过比较事件日志的时间戳与发票交易记录中的“到期日”字段计算得出。 采集 事件时间戳与发票的“到期日”字段一致时计算得出。 事件类型 calculated | |||
| 已发送付款提醒 | 已向客户发送未付款通知。此事件记录为从发票或客户记录发送的电子邮件或活动,通常由催收解决方案发送。 | ||
| 重要性 此事件对于评估催收策略的效果至关重要。分析该活动对后续付款的影响,有助于优化提醒频率和发送时机。 获取途径 根据发票或客户记录“通信”>“消息”子选项卡中电子邮件记录的创建情况记录。自动催收解决方案也可能将这些信息记录为自定义记录或任务。 采集 作为与发票关联的电子邮件或活动记录保存。 事件类型 explicit | |||
数据提取指南
步骤
- **登录NetSuite:**使用具备足够权限的角色登录NetSuite账户,以便在交易记录上创建并运行已保存搜索。
- **进入已保存搜索:**依次选择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类型的已保存搜索。
- 在“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类型的已保存搜索,并将“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”字段以获取原始发票编号。
- **运行并导出每个已保存搜索:**运行创建的每个已保存搜索。在结果页面中,点击导出图标(CSV、Excel或PDF),然后选择CSV。如果结果数量超过NetSuite导出上限,可能需要分批导出。
- **合并并转换数据:**使用Microsoft Excel、Python脚本或数据准备工具等,将导出的CSV文件合并为一个文件。
- **生成“已到付款到期日”事件:**在合并后的数据文件中,为每个“发票已创建”事件新增一行。将
ActivityName设为“已到付款到期日”,将EventTimestamp设为发票“DueDate”字段的值,并复制其他相关发票属性。 - **整理事件日志:**将所有列标题统一为所需格式,例如
InvoiceNumber、ActivityName和EventTimestamp。确保时间戳格式一致。为本次提取批次添加SourceSystem和LastDataUpdate列,并填入固定值。最后将合并后的文件保存为CSV,以便上传。
配置
- **前提条件:**用户角色必须具有创建、编辑和运行“Transaction”类型已保存搜索的权限。此外,还需要查看Invoice、Customer Payment、Credit Memo和System Notes记录的权限。
- **搜索类型:**所有数据提取均使用“Transaction”作为主要搜索类型。此类型可访问所需记录及其关联信息。
- **日期范围筛选:**为控制运行性能和数据量,请为每个搜索设置日期范围筛选。首次分析建议筛选最近3至6个月的“Date Created”。
- **Main Line筛选条件:**对于“发票已创建”等单据抬头级别的事件,将“Main Line”条件设为“true”。如需分析明细行(本流程不需要),则设为“false”。
- **System Notes:**捕获状态变更主要依赖System Notes。请确保已在NetSuite配置中为“Status”和“Approval Status”等关键交易字段启用审计(Setup > Company > Enable Features > SuiteCloud > SuiteAudit Trail)。
- **性能注意事项:**在NetSuite界面中,针对较大日期范围运行包含多个关联和公式字段的复杂搜索可能较慢。建议在非高峰时段运行并导出。如果搜索超时,请缩短日期范围并分批导出数据。
查询示例 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”端口let。点击“Set Up SuiteAnalytics Connect”链接,下载适用于您操作系统的ODBC驱动程序。按照NetSuite提供的说明安装并配置驱动程序,填写服务主机、端口、Account ID、Role ID、电子邮件和密码。
- 建立数据库连接:使用支持ODBC连接的SQL客户端工具,例如DBeaver、Tableau或Power BI。使用上一步配置的驱动程序创建新的ODBC连接。测试连接,确认可以成功进行身份验证并访问NetSuite只读副本数据库。
- 准备SQL查询:复制本文档“Query”部分提供的完整SQL查询。该查询用于提取订单到收款开票流程所需的全部活动和属性。
- 设置查询参数:执行前,找到查询中的占位值。将
'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数据库中。
查询示例 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%,改善现金流。
无需信用卡,几分钟即可完成设置。