1. 概述编辑
1.1 在线视频
在线视频学习请查看:参数入门示例。
1.2 应用场景
类似通信、监控行业,每天都有海量数据生成,数据库表中总数据量非常大,而报表中往往只要获取当天的几百条数据就可以了。
如果使用模板参数,就需要先取出所有数据,再进行过滤,取数+过滤,将消耗大量时间,极大影响报表的查询效率。而数据集参数在数据库查询时就已经完成了数据过滤,故在大数量场景下,使用数据集参数进行查询报表的设计。
1.3 功能简介
定义数据集时,通过在 SQL 语句中添加 ${para} 格式的内容,即可定义数据集参数,定义完成后,使用方法和模板参数一致。如下图所示,下拉框选择「华东」,点击查询,只查询出报表中华东地区的销售信息。
2. 示例编辑
2.1 定义数据集参数
在数据集 SQL 语句中,使用 ${para} 做为一个参数宏,即通过 ${ } 的格式定义参数,其中变量 para 为参数名,若字段值为字符串可加上引号使用,如 '${para}' 。
注:定义了数据集参数,即从数据库中查询取数时,会根据参数值来查询对应的数据,也就是说在数据准备时就完成了数据过滤。
如下,新建数据集 ds1,数据库查询对话框中写入 SQL 查询语句 SELECT * FROM 销量 WHERE 地区='${area}' ,相当于在数据库查询语句中定义一个数据集参数 area 。点击右下角「刷新」按钮,下方数据集参数管理面板会显示已经新建好的数据集参数 area ,设置它的默认值为华东。点击「确定」,即同时完成了数据准备和定义数据集参数的工作。
2.2 表格样式设计
1)如下图所示设置表格样式,其中给表格选择预定义样式 Head 类型的样式,标题字体自动居中。
2)将数据集中的字段拖入到对应单元格中,字体居中,给表格整体添加预定义样式默认的天蓝色内外框。
3)选中 C2 单元格,右边属性面板选择单元格元素>基本。数据设置下拉框选择汇总>求和。
2.3 参数添加控件
1)点击参数面板的「编辑」按钮,进入参数面板设置界面。
2)右上角控件设置面板会显示没有添加控件的参数,点击 「area 」或者点击「全部添加」,将参数的默认控件添加到参数面板。
注:参数与控件是通过参数名称进行绑定的,也就是说当控件名称与参数名称一致时,参数与控件就进行了绑定,即在 Web 端给控件赋值就相当于给参数赋值。
3)参数 area 的默认控件添加到参数面板后,效果如下图所示:
注:如果不想点击「全部添加」或「参数」快捷添加默认控件,也可以直接从控件栏中将控件拖拽到参数面板中,修改控件的名称与参数名称一致,即可将控件与参数进行绑定。
4)点击自定义控件的「编辑」按钮,选择下拉框控件类型,让用户通过下拉框选择参数值。
5)要想报表预览时点击「下拉框」可以出现参数值的选项,则需要设置下拉框的数据字典为销量表下的地区字段。
参数面板选中「下拉框控件」,右边属性面板选择属性>数据字典,点击数据字典「编辑」按钮,弹出数据字典设置对话框。数据字典的类型设置为数据库表,数据库为 FRDemo ,选择数据库表为销量,列名实际值和显示值都为地区。
注:控件绑定数据字典时,当数据集中有和控件同名的参数时,不要使用,否则将造成循环引用,使得模板出错,如此处ds1 。
6)点击「标签控件」,将控件值命名为地区:
7)将查询按钮往左边拖拽,形成紧凑式布局,让控件面板更加美观。再次点击参数面板的「编辑」按钮,完成参数控件的设置。
2.4 效果预览
2.4.1 PC 端
保存报表,点击「分页预览」查看报表。
下拉框选择「华东」,点击查询,只查询出报表中华东地区的销售信息。
下拉框选择「华北」,点击查询,只查询出报表中华北地区的销售信息。
2.4.2 移动端
移动端查看报表的方式参见 报表移动端预览。
下拉框选择「华东」,点击查询,只查询出报表中华东地区的销售信息。
下拉框选择「华北」,点击查询,只查询出报表中华北地区的销售信息。
3. 已完成模板编辑
已完成模板可参见:%FR_HOME%\webroot\WEB-INF\reportlets\demo\NewbieGuide\数据集参数.cpt
点击下载模板:数据集参数.cpt
4. 数据集参数的应用编辑
4.1 简单应用
在新建数据集时,定义 SQL 查询语句,直接使用 where 条件过滤出所需数据,从而大大缩短报表取数时间,如SQL 语句:
SELECT * FROM 销量 where 地区 = '${area}'
4.2 带公式的应用
数据集 SQL 查询语句中可以使用参数宏 ${} 动态地生成过滤条件,${} 执行结果与 SQL 语句拼接起来形成最终的查询语句,传递给数据库执行。${} 中可以使用 FineReport 所有内置的函数,如 if 函数,SQL 语句中也可以使用多个 ${}。
${} 中除了 FineReport 内置的函数名、常量外,其他变量就是数据集参数。
如下 SQL 语句:
SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 = '" + area + "'")} ${if(len(province) == 0,"","and 货主省份 = '" + province + "'")}
if 函数是 FineReport 内置的公式,变量 area 是数据集参数,如果 len(area)!=0,即 area 参数不为空,如 area 的值为华东,那么 if 语句的执行结果为and 货主地区='华东',将此句拼接到 SQL 语句中就变成:
SELECT * FROM 订单 where 1=1 and 货主地区='华东'
4.3 嵌套应用
定义数据集参数时,也可以嵌套使用。即通过一些逻辑判断嵌套定义多个数据集参数。如下 SQL 语句:
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' 查询。
5. 注意事项编辑
如果在设置数据集参数时,尽量不要在${}中直接再使用{ 、},可能会无法解析。