此案例适合场景:明细表中有多条类别相同的数据,现需要对类别重复的金额进行汇总求合,然后按唯一类别重新写入分类汇总表中。
一、“报销明细”表中设一辅助字段:
FZ分类+金额(单行文本),公式为:CONCATENATE(报销明细.分类,报销明细.金额) 注:将类别和金额合并,用于下一步按分类字段对金额汇总求和。
二、主表中设三个辅助字段:
1、FZ分类集合(单行文本):公式:UNION(报销明细.分类) 注:用于将分类字段中重复值清除,使用方法详见说明。
2、FZ分类+金额集合(单行文本):公式:报销明细.FZ分类+金额 注:因为子表中无法直接调用另一个子表中的数据,所以需要先将“报销明细”子表中的“FZ分类+金额”字段,做一个集合,方便“分类汇总”明细表中以后引用。
3、FZ分类行数(数字):公式:COUNT(UNION(报销明细.分类)) 注:计算经过清除重复值后的分类数,用于生成“分类汇总”明细表行数。
三、根据“FZ分类行数”对“分类汇总”用子表单联动的方法设置默认行数,并预填充序号。详见帮助文档
在“分类汇总”子表中设一个单行文本字段“分类”,和数字字断“金额求和”,公式为:
1、分类:SPLIT(FZ分类集合,",")[分类汇总.序号-1]
SPLIT函数先将“FZ分类集合”文本,用“,”分割成数组,再根据序号带入值。
2、金额求和:SUMPRODUCT(SPLIT(FZ分类+金额集合,分类汇总.分类))
同理先用SPLIT函数将“FZ分类+金额集合”文本,用“分类汇总.分类”字段的值分割成数组。然后再用SUMPRODUCT函数求和。
注:这里引用的功能是SUMPRODUCT函数在对数组求和时对于以数字开头的内容全部视同数字,自动忽略后面的非数字字符。例如:235油费,也视同235进行计算。所以对于数组 [10办公费,10办公费] 也是视同 [10,10] 进行求和,所以结果是20,此功能在官方帮助文档中没有表述。具体它的原理我也说不清楚,只是测试时偶然发现。所以实现了这一奇特功能。
【提示】分类字段开头、结尾不能出现数字,否则有可能出错。
测试页面:https://rwre764grq.jiandaoyun.com/f/5fae09bdcf76c200060e81c3
编辑于 2020-11-15 15:55
|