当报表数据量达到上百万条时,若展示速度较慢,可采用层式报表提升性能。然而,层式报表仅支持单一数据集。对于数据量庞大且涉及多个数据集的复杂模板,如何优化查询效率?本文将借助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、 分页预览可实时查看效果。
评论
更多评论