20. 递归合计

一个公司,有各个部门,继续下分各个科室,还有各销售团队,每个团队都有销售金额,如何获得逐级的销售额汇总(红色框选部分)。
模板可设计及全路径的赋值可参考:全路径(采用填表公式方法),在这个例子的基础上更新。
实现思路分析:先给明细的层赋值;然后找到最大层;再通过层的倒序(从大到小)计算每层的合计金额,依次给不同的层赋值,边赋值边保存。比如上图中,表单的最大层为4,则先计算并保存第3层的金额,再计算并保存第2层的金额,最后计算并保存第1层的金额。

1.添加数据项

添加基本信息辅助数据项——辅层级和最大层级。
给明细增加2个数据项——层和金额。

2.赋值明细的层

针对明细的层有2种赋值方法。若明细的节点手动添加时,则需要通过遍历的方式,在父节点的层上递增;若明细数据自动获取时,当编号按照长度递增,则可直接用excel本身的公式字符长度计算层,当编号使用分隔符隔开,层=字符串调换分隔符的长度,我们按照节点手动添加时的情况计算层。
①填写明细的“名称”时,把明细的信息依次赋值辅助数据项,达到遍历的效果(沿用全路径案例中的方法);
②当“辅ID”变化时,赋值层,根节点直接赋值“1”,
其他节点的层计算在父节点的层上加1;
完成第2步后,填写明细的名称时,所有的明细的“层”自动填写。

3.获取最大层级

①在填表公式的“工具栏按钮单击”事件下添加“合计”按钮,单击【合计】工具栏按钮时,利用“赋值”操作,调用数据接口“最大层级”,给“最大层级”数据项赋值。
②设计数据接口“最大层级(ID)”,找到某个表单明细中最大的层,利用函数获取。
数据源设置为“本模板.明细”;数据列中通过函数“最大值”获取明细中最大的层;
找到指定的表单并获取该表单明细中最大的层,需要添加参数ID(表单的唯一标识数据项)并设置过滤条件。

5.赋值辅层级

利用数据源“序号列表”得到多个层,利用最大层级-数据源.序号 得到倒序的“辅层级”,比如最大层级为4时,需要依次合计第4,、3、2级的合计金额,此时辅层级依次赋值3次——4、3、2。

6.计算指定层级的合计金额

当辅层级更改时,查询表单中当前层级的合计金额,并更新到父节点的合计金额上。
比如辅层级为4时,根据父节点分组统计表单中第4层的合计金额,并更新到指定父节点的“金额”上,依次类推.....
设计数据接口“合计金额(ID,层)”。数据源设置为“本模板.明细”;根据父节点分组统计表单中指定层的合计金额,数据列中包含分组数据项“父ID”和统计结果“合计金额”,其中合计金额由“明细的金额”调用合计函数获取。
过滤条件中添加2个参数——表单的唯一标识“ID”和明细的层“层”,根据这2个参数进行过滤。

7.保存

保存指定层级的金额,为上一级合计做准备。直接“引用”系统内置的“保存表单”操作或者添加“保存”操作。
:这种方法适用于数据量不大的情况,它会遍历循环查询并赋值保存
2022-12-01
35 34