帆软FineReport插入删除行后动态汇总

一、问题描述

一般情况下,我们直接使用条件汇总公式对单元格扩展出来的所有值求某个指定值的结果,可以得到一个准确的结果。但是在填报模式下,条件汇总公式的计算结果就不准确了。

如下,计算苹果的销量总和,预期得到的结果是4,实际结果却是0:

帆软FineReport插入删除行后动态汇总

二、实现效果

预期得到的效果如下,在页面插入删除行后,输入对应的值之后,公式可以直接计算出正确的结果:

帆软FineReport插入删除行后动态汇总

三、实现步骤

1)报表总体设计如下,A2、B2单元格插入文本框,A2单元格设置纵向扩展。

帆软FineReport插入删除行后动态汇总

2)选中A6单元格,输入公式

sum(B2[!0]{A2 = "苹果"})

3)选中B6单元格,输入公式

sum(maparray(split(A2,","),if(item = "苹果",indexofarray(split(B2,","),index),0)))

公式解析:

公式

解析

split(A2,",")、split(B2,",")

将A2、B2单元格扩展出来的所有值转化成数组,直接使用单元格引用的话,如果扩展的值只有一个,那么就无法被当做数组来计算。另外如果使用array()函数来转换,在部分jar下不生效。

maparray(split(A2,","),if(item = "苹果",indexofarray(split(B2,","),index),0))

将得到的A2扩展出来的数组进行转化。如果值等于苹果,那么就转化为B2扩展出来的对应下标的值,否则就等于0

sum(maparray(split(A2,","),if(item = "苹果",indexofarray(split(B2,","),index),0)))

将上一步转化后的数组进行汇总

4)保存后点击预览,效果如下所示:

帆软FineReport插入删除行后动态汇总

四、备注

版本信息:11.0.5(Build#persist-2022.06.15.17.11.21.865)

部分版本可以使用如下公式:

sum(greparray(array(B2),indexofarray(array(A2),index)="苹果"))

缺陷:部分jar版本中,插入删除行后,array()和greparray()两个函数没有生效。

更多相关文章请查看:

FineReport改写工具栏实现sql分页功能

FineReport如何实现单选按钮组控件的选项不同颜色

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章