历史版本8 :巧用参数注入 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

对于多数据集关联报表,报表的展现速度会很慢,通过 SQL 语句关联多个数据表又十分复杂。

1.2 解决思路

FineReport 提供「动态参数注入」功能,可加快报表的展现速度,又不用编写复杂的 SQL 语句。

动态参数注入,是通过注入的值对数据库中的数据进行操作的,只取对应的数据,所以会提高报表的性能。

注:动态参数注入只适用于「小数据量」的模板加快速度使用。大数据量的模板反而会降低加载速度。

      例如 4 万条数据注入到两个数据集里面去,实际上会依次加载 8 万条数据,反而会变慢。

2. 新建报表编辑

2.1 新建数据集

新建普通报表,新建两个数据集:

1)ds1:SELECT * FROM 订单

2)ds2:SELECT * FROM 订单明细

2.2 设计样式

报表样式如下图所示:

222

3. 方法对比编辑

本文将简单对比报表过滤复杂 SQL 动态参数注入三种方法的展现效率。

3.1 设置过滤

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

分页预览刚刚制作的报表,从日志中可看出,是将第二个数据集中的数据全部取出了,如下图所示:

222

注:若将数据全部取出会降低报表的性能,因此会降低报表的展现速度。

3.2 定义 SQL

若将两个数据集定义成一个数据集,则 SQL 语句非常复杂,容易写错且难排查问题,如下:

select a.订单ID,订购日期,到货日期,发货日期,产品ID,单价,数量,进价,折扣 from 订单 a,订单明细 b where a.订单ID=b.订单ID

3.3 使用动态参数注入

3.3.1 修改 SQL 语句

将上述模板中,数据集 ds2 的 SQL 语句,修改成:SELECT * FROM 订单明细 where 订单ID =${orderid}

将参数 orderid默认值设置为订单 ID 中的一个值,如:10248

3.3.2 参数注入设置

双击原进行过滤的 E2 单元格,在弹出数据列对话框中,点击动态参数注入按钮,弹出动态参数注入对话框

插入参数orderid,设置值为 A2 单元格,同时删除过滤条件,如下图所示:

222

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

222