报表性能优化方案之善用参数注入

1. 问题描述web

对于多数据集关联报表,当数据很大时报表的展示速度就会很慢,或经过写sql语句又很复杂。为此FineReport提供一种,既可加快报表的展示速度,又不用编写复杂的sql语句的方案。即便用动态参数注入功能。sql

2. 原理数据库

动态参数注入,是经过注入的值对数据库中的数据进行操做的,只是取对应的数据,因此会提升报表的性能。性能

3. 示例大数据

  • 新建模板spa

展示多个关联数据表的数据设计

SQL语句,ds1:SELECT * FROM [订单]日志

SQL语句,ds2:SELECT * FROM 订单明细orm

  • 报表样式产品

 

传统作法:先定义多个数据集,而后在报表中设置过滤条件,或使用链接将多个数据表定义成一个sql,但这两种方案会产生的一系列问题(具体下面有介绍)。而使用动态参数注入的功能可解决大数量报表展示的速度,下面对比看下这三种作法。

3.1 设置过滤

此方法是定义两个数据集查询出全部数据,而后在报表中设置过滤条件。

分页预览query_like.cpt,从日志中可看出,是将第二个数据集中的数据所有取出了,以下所示:

 

注:对于数据量大的报表,若将数据所有取出会下降报表的性能,所以会下降报表的展示速度。

3.2 定义sql

如果采用将两个数据集定义成一个数据集,则SQL语句为:select a.订单ID,订购日期,到货日期,发货日期,产品ID,单价,数量,进价,折扣 from 订单 a,订单明细 b where a.订单ID=b.订单ID

注:当数据集不少时, 这样定义sql很麻烦,看了也以为很复杂。

3.3 使用动态参数注入

  • 修改sql语句

将上述模板中,数据集ds2的sql语句,修改为:SELECT * FROM [订单明细] where 订单ID =${orderid},并将参数orderid设置个默认值为订单ID中的一个值,如:10248。

  • 参数注入设置

双击原进行过滤的E2单元格,在弹出数据列对话框中,点击动态参数注入按钮,弹出动态参数注入对话框,而后点击插入:名字和值分别为数据集ds2的参数:orderid和数据集ds1对应数据列所在的单元格:A2,且同时删除过滤条件。

点击设计器预览是,日志中可看出每执行一行就只是取出的对应订单ID的那条数据,以下图所示:

 

注:动态参数注入功能适用于大数据量报表,可以明显的体现出速度优点,而上文中的模板只是介绍其方法的。

相关文章
相关标签/搜索