报表平台FineReport报表性能优化(3)

报表平台FineReport报表性能优化(3)

ID:38247572

大小:474.47 KB

页数:5页

时间:2019-06-01

报表平台FineReport报表性能优化(3)_第1页
报表平台FineReport报表性能优化(3)_第2页
报表平台FineReport报表性能优化(3)_第3页
报表平台FineReport报表性能优化(3)_第4页
报表平台FineReport报表性能优化(3)_第5页
资源描述:

《报表平台FineReport报表性能优化(3)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、报表平台FineReport报表性能优化(3)启用行引擎执行层式报表1.问题描述这样一种报表:报表形式非常简单,只是简单的单数据源明细报表,但是数据量非常大,百万、千万甚至更多。报表取数及计算时间相当长。希望能够提高报表展示速度,对于用户来说,查询报表不会有滞后的感觉。2.解决方案2.1解决方案对于单数据源明细报表,可以启用行引擎来执行报表,提高报表展示速度,优化用户体验。2.2原理普通报表:取出全部数据后再执行报表,最后返回整体的报表结果给浏览器,用户访问到看到结果的时间=报表取数时间+报表执行时间;行引擎报表:边取数边执行报表,执行到哪页用户就可以看到哪页,

2、用户访问到看到结果的时间=首页数据读取时间+首页计算时间。2.3注意事项行引擎报表注重的是性能,由原理我们可以想象,对于行引擎报表,每页的计算必须是独立的,即报表不能有单元格关联的复杂运算,类似,为了提高行引擎报表的性能,FR舍弃了一些复杂的功能:行引擎报表只适用于单数据源、即单元格过滤不能使用,且必须是简单明细表,同时也不支持计算、条件属性等复杂报表功能。3.实现步骤我们以mysql数据库为例,将里面的S订单明细的数据用行式引擎显示,每页显示30行,设置如下:3.1新建数据集数据集ds1:SELECT*FROMS订单明细。3.2模板主体设计如下图,将表中的列全

3、部拖曳至模板主体中:3.3行式引擎设置选择模板>报表引擎属性,勾选用行式的引擎来执行报表,再勾选下面的使用按页运算分段执行报表,每页记录数使用默认值30,如下图:3.4效果查看点击分页预览,效果如下:行式引擎按页取数只适用于Oracle,mysql,hsql和sqlserver2008及以上数据库,其他数据库,如access,sqlserver2005等必须手动编写分页sql,才能实现按页取数,对于需要编写分页sql的数据库,请参考单数据源实现层式报表章节。行式引擎只适用于单数据源报表,对于多数据集报表,行式引擎无法实现对其进行分页显示,多数据源的层式报表的实现

4、请查看多数据集实现层式报表。单数据集分页SQL实现层式报表1.问题描述行式引擎按页取数只适用于Oracle,mysql,hsql和sqlserver2008及以上数据库,其他数据库,如access,sqlserver2005,sqlite等必须编写分页SQL。上一节介绍了直接行式的引擎实现层式报表的做法,下面以Access数据库为例介绍需要写分页SQL的数据库怎样利用行式的引擎实现层式报表。2.解决思路对于mysql这类可以直接使用行式的引擎实现层式报表的数据库来说,如果勾选了行式引擎,程序会自动生成分页sql,如,我新建了一个数据集ds1,来源于mysql数据

5、库,基本sql语句为:SELECT*FROM订单明细如果不定义分页sql,勾选行式引擎选项,预览报表时,程序会将上面的sql语句转化为下面的语句来取一页的数据:SELECTCOUNT(*)AStotalRowCountFROM(SELECT*FROM订单明细)t如果数据库是上面所说的access一类的无法直接生成分页sql的数据库,那么就需要编写分页SQL。3.操作步骤以FRDemo内置的sqlite为例,说明sqlite如何写分页查询。3.1新建数据集新建数据集ds1:SELECT*FROM订单明细。3.2添加分页查询SQL语句在数据查询面板中点击分页查询按钮

6、,编辑分页SQL语句,如下图:完整的sql语句如下:1.SELECT*2.FROM(3.SELECT*4.FROM(5.SELECT*6.FROM订单明细ORDERBY订单IDASClimit${fr_pagesize*fr_pagenumber}7.)ASe1ORDERBY订单IDDESClimit${8.if(fr_pagenumber==int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount-(fr_pagesize*(fr_pagenumber-1)),fr_pagesize)9.}10.)ASe2ORDER

7、BY订单IDASCSELECT*FROM(SELECT*FROM(SELECT*FROM订单注:上述代码放置在分页sql面板中时,要删除后面的注释语句,并且语句中的三次ORDERBY一定不能丢。分页sql语句注释${if(fr_pagenumber==int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount-(fr_pagesize*(fr_pagenumber-1)),fr_pagesize)}意思是:假如是最后一页的话,就取最后一页剩余的行数,假如不是最后一页就取每页需要显示的行数,示例中每页需要显示的行数为30

8、行。fr_pagenum

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。