反馈已提交

网络繁忙

数据集参数

  • 文档创建者:天玑科技-叶然
  • 编辑次数:34次
  • 最近更新:RosieY 于 2021-12-22
  • 1. 概述

    1.1 应用场景

    类似通信、监控行业,每天都有海量数据生成,数据库表中总数据量非常大,而报表中往往只要获取当天的几百条数据就可以了。

    如果使用模板参数,就需要先取出所有数据,再进行过滤,取数+过滤,将消耗大量时间,极大影响报表的查询效率。而数据集参数在数据库查询时就已经完成了数据过滤,所以使用数据集参数设计的查询报表会比使用模板参数的效率高。

    1.2 功能简介

    定义数据集时,通过在 SQL 语句中添加 ${para} 格式的内容,即可定义数据集参数,定义完成后,使用方法和模板参数一致。如下图所示,下拉框选择「华东」,点击查询,只查询出报表中华东地区的销售信息。

    1.png

    2. 使用说明

    数据集 SQL 查询语句中可以使用参数宏 ${}动态地生成过滤条件,${} 执行结果与 SQL 语句拼接起来形成最终的查询语句,传递给数据库执行。SQL 语句中可以使用多个 ${},定义多个参数使用。

    使用${} 定义参数时,{ }内写入的内容即为定义参数的内容,其中可以使用 FineReport 所有内置的函数,如 if 函数、len 函数等。{ }中除了 FineReport 内置的函数名、常量、字符串拼接语法外,其他变量就是数据集参数。

    如:SELECT * FROM 销量 where 地区 = '${area}' 中定义的数据集参数为 area。

    注:定义数据集参数时,尽量不要在${}中直接使用{ 、},可能会无法解析。若必须在${}中直接使用{ 、},需要使用函数 CONCATENATE 转义,例如:SELECT * FROM 销量${'{'}语句会出现报错,需要将语句改为 SELECT * FROM ${CONCATENATE("销量{")},即可正常查询。 

    带有数据集参数的 SQL 语句写好后,点击数据集定义界面「预览」按钮时,若显示出定义的数据集参数。则表明数据集参数定义成功。如下图所示:

    在参数位置输入值后点击确定,参数值就会代入 SQL 语句中,查询出数据。

    如下给出几种常见的应用方式,用户在使用时按实际场景调整即可。注意,因为数据集参数用在 SQL 查询语句中,所以在使用时,特别要注意语法和对应数据库类型的 SQL 语法匹配。

    2.1 简单应用

    如要定义一个地区参数,通过此参数过滤数据。新建数据集时,就可以在 SQL 查询语句中定义一个数据集参数 area:SELECT * FROM 销量 where 地区 = '${area}'

    SQL 语句中,其他内容都是确定的,唯有 area 不确定,当 area 对应不同值时,数据集也将查询出不同地区的数据。

    如果要实现多选查询,就可以结合 SQL 语句 in 的用法定义一个参数,如:SELECT * FROM 销量 where 地区 in ('${area}')

    输入参数值时注意要和数据库语法一致,如查询华东华北的数据 SQL 语法为 SELECT * FROM 销量 where 地区 in ('华东','华北'),输入的参数值形式应该为 华东','华北,这样加上定义时的 ('${area}') 就会拼接成正确的语法。

    2.2 带公式的应用

    定义数据集参数时,可以使用 FineReport 所有内置函数。如需要定义一个地区参数,当地区为空时,查询所有地区的数据;当地区值不为空时,查询对应地区的数据:

    SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} 

    定义时,先使用函数 len 获取参数的长度,然后使用 if 函数进行判断

    • 如果 area 参数的长度为 0,则内容为空,SQL 拼接后为 SELECT * FROM 订单 where 1=1

    • 如果 area 参数的长度不为 0,则将字符串 and 货主地区 = '参数area'拼接成一句 SQL ,如area的值为华东,那么参数定义部分的执行结果为and 货主地区='华东',完整的 SQL 语句就变成:SELECT * FROM 订单 where 1=1 and 货主地区='华东'

    2.3 定义多个参数

    如果在数据过滤中,需要多个过滤条件,则可以定义多个数据集参数,如:

    SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} ${if(len(province) == 0,"","and 货主省份 = '" + province + "'")}

    其中使用了两次 ${},定义了两个数据集参数 area 和 province,定义过程解释可参考 2.2 节。

    2.4 嵌套应用

    定义数据集参数时,也可以通过一些逻辑判断嵌套定义多个数据集参数。如:

    SELECT  * FROM 销量 where 1=1 ${if(len(area)!=0," and 地区='"+area+"'",if(len(product)=0,""," and 产品='"+product+"'"))}

    if 函数是 FineReport 内置的公式,变量 area 和 product 是数据集参数,如果len(area)!=0,即 area 参数不为空,即以

    SELECT * FROM 订单 where 1=1 and 货主地区='area' 查询,如地区为空,则要判断 len(product) ,若product参数为空,则不拼接任何查询条件,即查出所有,否则以 SELECT * FROM 订单 where 1=1 and 产品='product' 查询。

    3. 示例

    3.1 定义数据集参数

    新建数据集 ds1,数据库查询对话框中写入 SQL 查询语句 SELECT * FROM 销量 WHERE 地区='${area}' ,相当于在数据库查询语句中定义一个数据集参数 area 。点击右下角「刷新」按钮,下方数据集参数管理面板会显示已经新建好的数据集参数 area ,设置它的默认值为华东。点击「确定」,即同时完成了数据准备和定义数据集参数的工作。如下图所示:

    2021-06-18_15-39-08.png

    3.2 表格样式设计

    1)如下图所示设置表格样式,其中给表格选择预定义样式 Head 类型的样式,标题字体自动居中。如下图所示:

    Snag_432649d.png

    2)将数据集中的字段拖入到对应单元格中,字体居中,给表格整体添加预定义样式默认的天蓝色内外框。如下图所示:

    Snag_437db0d.png

    3)选中 C2 单元格,右边属性面板选择「单元格元素>基本」。数据设置下拉框选择汇总>求和。如下图所示:

    Snag_43a083e.png

    3.3 参数添加控件

    1)点击参数面板的「编辑」按钮,进入参数面板设置界面。如下图所示:

    Snag_443fee7.png

    2)右上角控件设置面板会显示没有添加控件的参数,点击 「area 」或者点击「全部添加」,将参数的默认控件添加到参数面板。如下图所示:

    注:参数与控件是通过参数名称进行绑定的,也就是说当控件名称与参数名称一致时,参数与控件就进行了绑定,即在 Web 端给控件赋值就相当于给参数赋值。

    1.png

    3)参数 area 的默认控件添加到参数面板后,效果如下图所示:

    注:如果不想点击「全部添加」或「参数」快捷添加默认控件,也可以直接从控件栏中将控件拖拽到参数面板中,修改控件的名称与参数名称一致,即可将控件与参数进行绑定。

    2.png

    4)点击自定义控件的「编辑」按钮,选择下拉框控件类型,让用户通过下拉框选择参数值。如下图所示:

    3.png

    5)要想报表预览时点击「下拉框」可以出现参数值的选项,则需要设置下拉框的数据字典为销量表下的地区字段。

    参数面板选中「下拉框控件」,右边属性面板选择「属性>数据字典」,点击数据字典「编辑」按钮,弹出数据字典设置对话框。数据字典的类型设置为数据库表,数据库为 FRDemo ,选择数据库表为销量,列名实际值和显示值都为地区。如下图所示:

    注:控件绑定数据字典时,当数据集中有和控件同名的参数时,不要使用,否则将造成循环引用,使得模板出错,如此处 ds1 。

    4.png

    6)点击「标签控件」,将控件值命名为地区:。如下图所示:

    6.png

    7)将查询按钮往左边拖拽,形成紧凑式布局,让控件面板更加美观。再次点击参数面板的「编辑」按钮,完成参数控件的设置。如下图所示:

    7.png

    3.4 效果预览

    3.4.1 PC 端

    保存报表,点击「分页预览」查看报表。

    下拉框选择「华东」,点击查询,只查询出报表中华东地区的销售信息。

    1.png

    下拉框选择「华北」,点击查询,只查询出报表中华北地区的销售信息。

    2.png

    3.4.2 移动端

    移动端查看报表的方式参见 报表移动端预览

    下拉框选择「华东」,点击查询,只查询出报表中华东地区的销售信息。

    1567583530409897.jpg

    下拉框选择「华北」,点击查询,只查询出报表中华北地区的销售信息。

    1567583548937424.jpg

    4. 已完成模板

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\Parameter\数据集参数.cpt

    点击下载模板:数据集参数.cpt

    附件列表


    主题: 参数应用
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

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

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭