背景:
以某公司的【销售流程、费用流程、分摊流程、利润流程】为例,需要根据对应规则,输出【销售明细、费用明细、销售明细汇总、平台费用分摊、利润明细】
本 DEMO 仅以其中的【销售流程、费用流程、分摊流程】为例,按【年月】颗粒度进行流程处理
核心组件:数据流3.0
、连接器
、数据表
DEMO 地址:
DEMO中的数据流仅可运行,请勿修改配置!
业务背景的流程与规则说明:
介绍业务背景、数据流核心配置、实现效果。
模拟销售和费用数据:
在本系统中,创建相关数据表元素,用于提供规则和承接输出数据,以 MySQL 数据表为例。
为方便编辑数据,可以用电子表格组件统一管理相关规则表:
在开始节点配置启动参数{"YearMonth":"202301"}
,需要传入【年月】
无需定时触发,只要手动触发即可
连接器查询
节点用于获取 SAP 系统中指定年月的发票明细
数据表查询
节点用户获取本系统中的相关业务规则
两个查询节点都提供了 UI 模式和 SQL 模式用于查询,以 UI 模式为例:
数据表查询
节点直接全表查询即可:
进阶:使用参数和变量
如果节点之间有执行的前后顺序,那么后续节点可以引用前序节点的运行结果,引用方式用Operator.nodeX.data
,还支持更多变量的引用,详见DPL_变量体系整理。
举个例子,本场景中,连接器查询
节点仅需查询指定年月的数据,指定年月为启动参数,也是开始节点的输出结果,因此在过滤条件中可以需要引用Pipeline.params.YearMonth
。
用于处理数据集,也就是按业务规则处理数据,这里可以与业务要求的步骤一一对应。
数据源选择连接器查询
节点得到的 SAP 发票明细
使用连接(join)
步骤,连接数据表查询
节点得到的各种业务规则,举例
使用列选择
步骤,只保留需要的列
使用列计算
步骤,进行列间计算,得到新列,计算需要使用 SQL 表达式(DuckDB 语法)
此步骤完成后,就能得到需要的结果了,接下来只需要映射到目标表即可。
带前序节点一同调试,检查数据:202301期间有3100条数据
使用数据表操作
节点提交数据库。
DEMO 中为先删后插,实际根据业务需求决定是否需要先删除。
数据源选择内置业务数据源
先用删除
步骤,删除本年月的数据
再用数据集-新增
步骤,将UI 转换
节点输出的结果,映射到目标数据表
同销售流程,不赘述。
连接器查询
节点用于获取 SAP 系统中指定年月的发票明细
数据表查询
节点用户获取本系统中的相关业务规则
同销售流程,不赘述。
区别于销售流程,费用流程这里按业务规则,拆分成 5 个独立的 UI 转换节点了,每个 UI 节点的数据源是上一个节点的输出结果。
当然,也可以和销售费用一样,编排在一个节点中,使用多个步骤区分,按需选择即可。
费用流程的UI 转换
节点,主要有按条件更新字段的需求,例如【更新物流费】,需要只更新【二级科目=物流费】的数据,其他数据不受影响
那么就需要用到列计算
步骤,在 SQL 表达式中用CASE WHEN
语法处理,这里支持 DuckDB 的 SQL语法。
列计算
步骤定义的字段名,如果和已有字段名重复,则为更新该字段。
按规则配置完成后,就能得到需要的结果了,接下来只需要映射到目标表即可。
带前序节点一同调试,检查数据:202301期间有100条数据
使用数据表操作
节点提交数据库。
DEMO 中为先删后插,实际根据业务需求决定是否需要先删除。
同销售流程,不赘述。
同销售流程,不赘述。
区别于其他流程,分摊流程需要将 1 条费用明细,按分摊比例计算到多个事业部中,有 N 个事业部就需要多 N 列展示对应的分摊金额。
这里可以使用到透视节点来完成:
效果:
区别于其他流程:
为了计算分摊比例的分母,也就是总销量或总人数,用到了【列计算-窗口聚合】步骤:
为了将 N 条费用明细连接 M 个事业部对应的分摊比例,在【连接】步骤中,用到了【交叉】的连接方式,得到 N*M 条数据;
费用明细数据中规定了不同的分摊规则,各数据按照不同规则计算完成后需要将结果取并集,因此使用了【集合(union)】步骤;
回到顶部
咨询热线