历史版本17 :数据集参数实现动态列 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 预期效果

使用函数实现动态列 报表需要取出所有的数据,然后来实现动态列报表,当数据量大且所选列不是很多的情况下性能就慢了。

该节我们介绍另一种动态列制作方法,该方法在数据量大时可以实现 层式报表分页查询,从而提高报表性能。

1.2 实现思路

通过定义数据集参数直接选出需要展示的列,将数据列拖入到单元格中。

2. 示例编辑

2.1 新建模板

新建普通报表,新建一个数据集 ds1,SQL 语句:SELECT ${col} FROM 销量

点击刷新按钮;设置参数 col(col就是我们的“数据集参数”),将其默认值设置为*,意思就是“查询出所有数据”。如下图所示:

222

2.2 表样设计

由于不确定用户选择的字段个数,因此制作模板时需要拖入所有字段。此默认参数即为查询出全部,我们将该表的 5 个字段依次拖入模板中,并设置数据列属性为列表;

另外不确定用户会选择哪些字段,因此拖入的字段不能用固定的列名。选中数据列所在单元格,将列名改为列序号,例如下图 A2:

222

同理 B2、C2、D2、E2 数据列分别改为:#2、#3、#4、#5;数据设置均设置为:列表。

注:由于列是不固定的,所以要将数据列的名称换成 #1,#2,# 数字代表数据对应的第几列,#1 表示第一列的数据。

表头设置,右击 A1 单元格插入公式=INDEXOFARRAY(split($col,","),1),将$col参数转换成数组,返回数组里的第一个的值 ,B1、C1、D1、E1分别返回第二、三、四、五个的值,

所以 B1 单元格使用公式=INDEXOFARRAY(split($col,","),2),以此类推……

如下图所示:

222

2.3 报表边框和表头背景设置

给 A2-E2 增加条件属性,点击要改变的属性选择边框:编辑添加外部边框;类型选择公式,在公式中输入:len($$$)!=0即单元格有数据的话显示边框。如下图:

222

给 A1-E1 增加条件属性,点击要改变的属性选择背景和边框,类型选择公式,在公式中输入:len($$$)!=0即单元格有数据的话显示背景和边框。

222

注:公式len($$$)!=0中,如果单元格数据类型为字符串,则公式应为len('$$$')!=0。

2.4 参数面板设置

设置参数面板,col 参数生成控件。点击控件,选择下拉复选框控件;控件值为空;

设置数据字典的类型为公式,实际值输入公式=TABLEDATAFIELDS("ds1"),如下图所示:

222

2.5 参数为空默认查询全部

2.5.1 新增数据集

新建一个数据集 ds2,SQL 语句:SELECT * FROM 销量 limit 1

这里只需要查询一条数据来获取表当中的所有字段名称。

1578043471792763.png

2.5.2 新增点击事件

选中查询按钮,新增点击事件,且设置参数a,公式TABLEDATAFIELDS("ds2"),获取所有字段名称。如下图所示:

1578044842968572.png

JS 代码如下:

var Widget = this.options.form.getWidgetByName("col"); 
var value =Widget.getValue(); //获取控件实际值 
if(value==''||value==null){
/*获取参数面板中的文本控件,判断后赋*/
var area2=contentPane.parameterEl.getWidgetByName("col");
area2.setValue(a);
_g().parameterCommit();
}
else{
_g().parameterCommit();
}

2.6 效果预览

点击分页预览,当选择对应的一些数据列,点击查询就展示对应选择列的数据,如下图所示:

222

注:若数据量非常大的情况下,此方法可以实现分页查询的效果来提高性能,具体的设置方法可参考 多数据集实现层式报表章节文档

注:参数面板中下拉复选框控件的默认值必须为空。

3. 已完成模板编辑

已完成模板请参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameterr\DynamicCol\数据集参数实现动态列.cpt

点击下载模板:数据集参数实现动态列.cpt