当报表数据量达到上百万条时,若展示速度较慢,可采用层式报表提升性能。然而,层式报表仅支持单数据集。面对多数据集且数据庞大的情况,如何优化查询效率?本文将借助FineReport报表工具,简要介绍在多数据集环境下提升大数据量报表查询速度的实现方法,帮助用户改善加载体验与运行效率。
1、 创建新模板
2、 创建一个名为mutipage.cpt的新模板,为提升页面加载效率,采用分页查询机制。通过该方式获取各个产品的详细资料,并统计每个产品在相关订单中的应付金额总和。在配置数据集时,使用的SQL查询语句如下:从产品、订单和订单明细三张表中提取信息,关联条件为产品表的产品ID与订单明细表的产品ID一致,且订单明细表的订单ID与订单表的订单ID匹配。同时,限定查询范围为当前页码对应的记录区间,具体通过表达式产品.产品ID between 10*($${page}-1)+1 and 10*$${page}实现。查询结果包含产品ID、产品名称、供应商ID、类别ID、单位数量、单价、库存量、订购量,以及各订单中该产品的应付金额合计,字段命名为应付款项。结果按产品ID升序排列。设定参数page的初始值为1,首次加载时仅显示第一页内容,即前10条记录;当参数值调整为2时,则检索第11至20条数据,对应第二页内容。依此类推,每页展示10条记录,实现逐页浏览功能,有效控制单次查询的数据量,提升系统响应速度与用户体验。
3、 报表每页显示10条数据,查询时每次仅提取10条记录,以提升加载速度。
4、 自定义前后页导航按钮
5、 分页查询时,报表需根据page参数获取指定行号范围的数据。切换下一页时,page加1以查询后续10条;切换上一页时,page减1以获取前10条记录。由于报表默认的翻页按钮无法实现该逻辑,不能动态传递更新后的page值,因此必须自定义上一页和下一页按钮,通过手动控制page参数来准确加载对应页码的数据,确保分页查询功能正常运行。
6、 计算单元格中前一页和后一页的页码数值
7、 由于工具栏无法直接读取page参数,需先在单元格内计算出上一页和下一页的页码,再通过工具栏按钮读取该单元格中的页码值以实现翻页功能。
8、 自定义翻页按钮样式
9、 进入模板的Web属性,选择分页预览设置并启用独立配置,在工具栏添加上一页和下一页两个自定义按钮,调整后仅保留图示中的按钮显示。
10、 首尾页的处理方式
11、 首次打开报表时默认显示第一页,此时上一页按钮应禁用,避免点击后请求页码为0的数据,导致查询-9至0行记录出错;当翻至最后一页时,下一页按钮也应失效。具体逻辑为:若当前页减一等于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、 分页预览可实时查看效果。
评论
更多评论