在实际应用中,循环引用问题较为常见,例如每条记录包含期初与期末数值,下一期的期初需引用上一期的期末值。本文将借助Java商业智能报表工具FineReport,对此类场景进行具体演示与实现,帮助理解数据间的关联处理方式。
1、 创建报表,设计样式
2、 创建一个新的工作簿,导入数据集。使用SQL语句从库存表中筛选出6月份的记录,提取日期、入库和出库字段,并按日期升序排列,以便查看该月每日的出入库情况。
3、 设计报表如下
4、 数据列配置如下:
5、 设置循环引用
6、 方案一:
7、 生日存档
8、 若6月份之前余额为零,则在B3单元格中输入公式:=IF(A3=1, 0, B2+C2-D2)。当A3等于1时,表示首日,上日库存为0;从第二天起,上日库存等于前一天的库存加上当日入库量再减去当日出库量,以此类推,逐日累计计算库存余额。
9、 今日库存
10、 在E3单元格输入=B3+C3-D3,表示当日库存等于昨日库存加上当日入库减去当日出库。
11、 由于E3单元格引用了B3的数值,若直接用E3计算上日库存,将导致B3与E3相互引用,形成循环计算,因此不可行。
12、 第二种方法
13、 在B3单元格中直接输入循环引用公式=CIRCULAR(A3, B3, C3, D3),其效果相当于使用条件判断公式=if(A3=1, 0, B3+C3-D3)。若需实现横向扩展功能,可在原公式基础上增加第五个参数,设置为false,即写成=CIRCULAR(A3, B3, C3, D3, false)。该参数控制计算方向,确保数据按行依次推进,适用于需要水平展开的场景。通过这种方式,可灵活实现不同方向的循环计算需求。
14、 保存并预览
15、 保存模板后,预览效果所示。
评论
更多评论