反馈已提交

网络繁忙

当前为10.0版本文档,只有最新版本的文档支持在线编辑修改,如果想创建/编辑文档,请移步至 最新版帮助文档

巧用参数注入

  • 文档创建者:文档助手1
  • 历史版本:12
  • 最近更新:Catqiu 于 2021-07-07
  • 1. 概述

    在实际应用会出现多数据集关联报表,报表的展现速度会很慢,使用 SQL 语句关联多个数据表又十分复杂。FineReport 提供「动态参数注入」功能,可加快报表的展现速度,又不用编写复杂的 SQL 语句。

    动态参数注入,是通过注入的值对数据库中的数据进行操作的,只取对应的数据,从而提高报表的性能。本文将简单对比数据列过滤复杂 SQL 动态参数注入三种方法的展现效率。

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

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

    2. 模板准备

    2.1 数据列过滤

    2.1.1 新建报表

    新建两个数据集,ds1:SELECT * FROM 订单;ds2:SELECT * FROM 订单明细

    报表样式如下图所示:

    2021-07-06_13-41-55.png

    2.1.2 设置过滤条件

    选择 D2 单元格,对 D2 单元格设置过滤条件,可选列为订单 ID ,操作符为等于,对应单元格为 A2 。如下图所示:

    2021-07-06_13-59-31.png

    2.2 动态参数注入

    2.2.1 修改 SQL 语句

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

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

    2.2.2 参数注入设置

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

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

    222

    2.3 复杂 SQL 语句

    新建数据集,SQL 语句为: select a.订单ID,订购日期,到货日期,发货日期,产品ID,单价,数量,进价,折扣 from 订单 a,订单明细 b where a.订单ID=b.订单ID

    报表样式参考本文 2.1.1 节。

    3. 方法对比

    3.1 数据列过滤

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

    222

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

    3.2 复杂 SQL

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

    3.3 动态参数注入

    分页预览本文 2.2 节制作的报表,日志中可看出每执行一行就只是取出的对应订单 ID 的那条数据,如下图所示:

    222

    4. 总结

    方式推荐使用场景
    数据列过滤当数据量较小时,可使用数据列过滤进行设置
    复杂 SQL任意场景下均可使用,当数据量较大时推荐使用 新计算引擎 
    动态参数注入当数据量较小或适中时,建议使用参数注入功能,可以降低写 SQL 的时间,并使得模板运行速度有所提升


    附件列表


    主题: 性能优化
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    请前往「服务平台」,选择「在线支持」

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526