中关村在线

软件

FineReport多数据集层式报表实现

当报表数据量达到上百万条时,若展示速度较慢,可采用层式报表提升性能。然而,层式报表仅支持单一数据集。对于数据量庞大且涉及多个数据集的复杂模板,如何优化查询效率?本文将借助Java报表工具FineReport,简要介绍一种可行的提速方案,帮助实现多数据集场景下的快速响应与流畅展示。

1、 创建新模板

2、 创建一个新的多页模板文件,命名为mutipage.cpt。为了提升数据加载和展示的效率,采用分页机制进行数据查询。通过该方式,系统能够逐页获取每种产品的详细资料,并同时计算与该产品相关的订单中所产生的应付金额。在配置数据集时,使用的SQL查询语句如下:从产品、订单和订单明细三张表中提取信息,关联条件为产品表中的产品ID与订单明细表中的产品ID一致,且订单明细表中的订单ID与订单表中的订单ID相匹配。查询范围限定为当前页码对应的产品ID区间,具体为产品ID介于10乘以(当前页码减1)加1与10乘以当前页码之间。同时,对每个产品的各项属性如产品ID、名称、供应商ID、类别ID、单位数量、单价、库存量和订购量进行查询,并汇总其对应的应付金额,使用sum函数将其记为应付款项。查询结果按照产品ID升序排列。设置一个名为page的参数,初始默认值为1,表示首次加载时显示第一页内容,仅获取第1至第20条记录;当page值为2时,则查询第21至第40条数据,以此类推,实现逐页浏览功能。

3、 报表每页显示10条数据,查询时每次仅提取10条记录,以提升加载速度。

4、 自定义前后翻页按钮

5、 启用分页查询后,报表需依据page参数获取指定行号范围内的数据。切换下一页时,page值加1以加载后续10条记录;返回上一页时,page值减1以显示前10条数据。由于报表自带的翻页按钮无法实现该逻辑控制,不能动态传递page参数,因此必须设计自定义的上一页和下一页按钮,以准确触发对应页码的数据请求,确保分页功能正常运行。

6、 计算单元格中上一页和下一页的页码数值

7、 由于工具栏无法直接获取page参数,需先在单元格中计算出上一页和下一页的页码,再通过工具栏按钮读取该单元格的数值。

8、 自定义翻页按钮样式

9、 进入模板的网页属性设置中的分页预览选项,选择独立配置该模板。在工具栏添加上一页和下一页两个自定义按钮,并保留所示的必要按钮,其余隐藏。

10、 首尾页的特殊处理方式

11、 首次打开报表默认显示第一页,此时上一页按钮应禁用,避免点击后请求页码为0的数据,导致查询-9至0行记录出错;翻至最后一页时,下一页按钮也应失效。当当前页减1等于0时,上一页不可用;当下一页大于总页数时,下一页不可用,确保翻页操作始终在有效范围内进行。

12、 计算总页数

13、 根据总记录数和每页显示数量计算总页数。创建新数据集 ds2,使用 SQL 语句:SELECT count(*) as 总数 FROM 产品,获取产品表的总条数,并将其拖入指定单元格。

14、 双击总数单元格,打开列设置对话框,进入高级选项中的自定义显示,输入公式:roundup($$$$$$/10,0),即可计算出总页数。

15、 调整首行行高为零或直接隐藏该行内容。

16、 选择上一页自定义按钮,点击自定义JavaScript,然后在JS代码框中输入相应脚本即可完成设置。

17、 当报表处于第一页时,上一页按钮将无法使用。

18、 读取A1单元格中的上一页页码值,可使用html()或Text()方法获取;随后重新加载报表,并将获取到的页码赋值给page参数以实现页面跳转。

19、 上一页按钮的设置方法与下一页类似,只需获取B1的数值,在JavaScript中相应填写即可实现功能。

20、 当当前页数大于总页数时,表示已到达最后一页,此时下一页功能将不可用。

21、 {

22、 }

23、 首次打开报表时,因page参数在数据集中定义,其默认值无法直接传递至单元格。为确保正常显示,需设置一个与之相同的模板参数page,并将其默认值设为1。如此一来,模板初次加载时,上一页按钮将保持不可用状态,界面逻辑保持一致,提升用户体验。

24、 分页预览可实时查看效果。

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具