大数据量分组报表展现实例介绍
润乾报表提供的分页计算功能只适用于清单式列表,本文将通过一个实例介绍如何解决大数据量分组报表的展现效率问题。
本例是通过先将数据按照分组排好序,再通过页面每次传入的页码、起始行(begin)和每页行数(queryRows)取出该页的数据,若报表中有分组合计则通过sql的方式求出。
使用方法
第一步,初始化mysql数据库
运行groups_test.sql脚本,初始化例子数据。
第二步,拷贝文件到指定目录
将js\Base64.js(带目录)拷贝至应用根目录;
将group_page_show.jsp、group_raq_pages.jsp和groups_test.raq文件拷贝至应用根目录;
将groupPage.jar拷贝至应用的WEB-INF\lib下
第三步,启动应用,访问groups_raq_pages.jsp,在展现的页面输入框中输入页码,点击查询即可看到效果,如下图:
使用说明
关于报表
报表数据集sql(mysql数据库)要写成select … from table order by c1,c2,c3 limit ? , ?,其中c1 c2 c3为报表中的分组字段,且顺序要与报表中分组字段顺序相同,如:SELECT * FROM groups_test order by c1,c2 limit ?,?;
数据集参数为begin和queryRows,参数名固定不可更改;
报表中若需要进行合计,需使用query函数计算,而不能再使用数据集或报表sum函数。如:=query2(“mis2datasource”,”select distinct sum(c3) from groups_test where c1=? and c2=?”,A3,B3)
group_raq_pages.jsp
开发者应重新本页面,重写后的页面使用iframe引入group_page_show.jsp页面,引入格式为:
group_raq_show.jsp?raq=***&sql=***&dataRows=*&topRows=*&bottomRows=*&pageNum=*&print=*
引入时须注意如下几点:
1.group_page_show.jsp上有一个id为MaxPageNums的隐藏域,它的value值是分页总数。
2.需要通过url传递参数:其中raq和sql两个参数需要使用Base64.js进行编码。
raq:分组报表文件
报表中应该包含两个类型是整数的参数,并按介绍使用这两个参数:
begin:报表显示内容在数据库中的开始行。
queryRows:报表读取数据库中数据的行数。
sql:分组模式说明sql语句,用来进行分组报表分页情况的预处理。
格式:select distinct 具有合计行的分组字段1,具有合计行的分组字段2,count() from table group by 分组1,分组2,分组3;
select后的字段是有合计行的分组字段和分组包含的数据行数目,group by后的字段为报表中分组字段,且顺序相同,如:select distinct c1,c2,count(c3) from groups_test group by c1,c2;
dataRows:每个分页包含的数据行数,包括数据行和合计行,不包括表头,
页眉,页尾等每页开始和结束时固定包含的行
topRows:数据行开始位置是报表的第几行。
bottomRows:数据行结束后报表还有多少行
pageNum:要显示页的页码,可以有多个,有多个时用逗号分隔,只会显示第一个页码
表示的页
print:是否打印,值为0时表示正常的报表展示。值为1表示打开报表后立即打印,如
果pageNum是逗号分隔的多个页码,会打印所有页。
3.修改javascript 函数runqian_printOver()中的url,改为group_page_show.jsp页面的实际使用路径。
4.分页后报表支持润乾报表的功能函数,但是导出功能只能导出当前页面显示的内容。
Base64.js
url编码和解码用。
groupPage.jar
封装了分页实现类。