当报表数据量达到上百万条时,若呈现速度较慢,可采用层式报表提升性能。然而,层式报表仅支持单一数据集。对于多数据集且数据庞大的情况,如何优化查询效率?本文以在线报表工具FineReport为例,简要介绍在多数据集环境下提升报表查询速度的可行方案,帮助实现高效数据展示与响应。
1、 创建新模板
2、 创建一个名为mutipage.cpt的新模板,为提升数据显示效率,采用分页查询机制。通过该方式获取各个产品的详细资料,并统计每个产品在相关订单中的应付金额总和。在添加数据集时,设定SQL查询语句如下:从产品、订单和订单明细三张表中提取信息,关联条件为产品表的产品ID与订单明细表中的产品ID一致,且订单明细表的订单ID与订单表的订单ID相匹配。同时,限定查询范围为当前页码对应的产品区间,即产品ID位于10乘以(当前页码减1)加1,至10乘以当前页码之间。查询结果包含产品ID、产品名称、供应商ID、类别ID、单位数量、单价、库存量、订购量,并通过聚合函数sum计算各产品对应的应付金额总和,别名为应付款项。结果按产品ID升序排列。设置参数page的默认值为1,当首次加载页面时,仅检索第一页数据,即产品ID在1到20之间的记录;当page参数值为2时,则获取第二页内容,对应产品ID为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行记录出错。当翻至最后一页时,下一页按钮也应失效。具体逻辑为:若当前页减一等于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的值,在JS中相应填写即可。
20、 当当前页数大于总页数时,表示已到达最后一页,此时下一页功能将不可用。
21、 {
22、 }
23、 首次打开报表时,因数据集中的page参数默认值无法立即传递至单元格,需额外定义一个名称相同、默认值为1的模板参数page。通过此设置,可确保模板初次加载时上一页按钮保持不可用状态,避免操作异常,提升用户体验与界面逻辑一致性。
24、 分页预览,效果即时可见。
评论
更多评论