数据集参数实现动态列

  • 文档创建者:文档助手1
  • 编辑次数:19次
  • 最近更新:Carly 于 2020-01-06
  • 1. 概述

    1.1 预期效果

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

    本文介绍另一种动态列制作方法,该方法在数据量大时可以实现 层式报表分页查询,从而提高报表性能。如下图所示:

    1578296538359623.gif

    1.2 实现思路

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

    2. 示例

    2.1 新建模板

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

    设置数据集参数 col,默认值为*,即查询出所有数据。如下图所示:

    1578297360471480.png

    2.2 设置报表样式

    2.2.1 表样设计

    由于不确定用户选择的字段个数,因此制作模板时需要拖入所有的 5 个字段。

    1)表头行

    在 A1-E1 单元格插入公式,将 $col 参数转换成数组,A1-E1 单元格分别返回数组里的第 1-5 个的值。如下图所示:

    1578298141200719.png

    公式内容如下表所示:

    单元格公式
    A1INDEXOFARRAY(split($col,","),1)
    B1INDEXOFARRAY(split($col,","),2)
    C1INDEXOFARRAY(split($col,","),3)
    D1INDEXOFARRAY(split($col,","),4)
    E1INDEXOFARRAY(split($col,","),5)
    2)表内容

    在 A2-E2 单元格插入数据列,数据集选择ds1,数据列分别为 #1、#2、#3、#4、#5,数据设置为列表,如下图所示:

    注:# 数字代表数据对应的第几列,#1 表示第一列的数据。

    1578299868253277.png

    2.2.2 设置报表边框

    给 A2-E2 单元格添加条件属性,如下图所示:

    选择边框属性,设置为外部边框;选择条件类型为公式,公式内容为:len($$$)!=0。即单元格有数据的话显示边框。

    1578300358941453.png

    2.2.3 设置表头背景

    给 A1-E1 增加条件属性,如下图所示:

    选择背景属性,设置为蓝色;选择边框属性,设置为外部边框;选择条件类型为公式len($$$)!=0。即单元格有数据的话显示背景和边框。

    1578300637210342.png

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

    2.3 设置参数

    点击参数面板,新增标签控件,控件值类型为字符串,值为col

    新增下拉复选框控件,控件名称为col,控件值为空,数据字典类型为公式,实际值输入公式:TABLEDATAFIELDS("ds1"),如下图所示:

    1578301177176762.png

    注:参数面板中下拉复选框控件的默认值必须为空,否则无法获取所有列。

    2.4 设置点击事件

    参数为空时,点击查询按钮,默认查询全部列。

    2.4.1 新增数据集

    新增数据集 ds2,SQL 语句为:SELECT * FROM 销量 limit 1。通过查询一条数据,来获取表当中的所有字段名称。

    1578301518397350.png

    2.4.2 新增点击事件

    点击参数面板,新增查询按钮,新增点击事件,添加 JavaScript 代码。如下图所示:

    设置参数a,公式TABLEDATAFIELDS("ds2"),获取所有字段名称。

    1578044842968572.png

    JavaScript 代码如下:

    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.5 效果预览

    2.5.1 PC 端

    点击分页预览,当选择对应的一些数据列,点击查询就展示对应选择列的数据,如1.1 预期效果所示。

    2.5.2 移动端

    APP 和 HTML5 端效果,如下图所示:

    33333.gif

    3. 已完成模板

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

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

    附件列表


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