同字段数据多列显示的解决方案

问题描述

在制作报表时,需要将数据库表里一个字段的数据按照条件取值后分为多列显示。由于扩展格机制,用户会发现实现不了这样的需求。

          本文将介绍一下如何用valueat函数和selectEx函数来实现按条件取值分多列显示数据的需求。

 

解决方案

制作报表,如图所示:

 

 

方法一:使用selectEx函数实现

设置B2单元格表达式为:=ds1.selectEx( 产品ID,产品ID%2==0)

设置F2单元格表达式为:=ds1.select1( 产品ID,产品ID==B2+1),并设置其左主格为B2

其中,selectEx函数说明见文章的附录。

预览效果如下图所示:

 

 

方法二:使用valueat函数实现

首先在A2单元格中用count函数计算出每列要显示的数据条数,然后在A3单元格中to函数从0扩展出展示数据所需要的单元格数量,最后用valueat函数根据指定位置返回数组或者集合表达式中的某一个元素。

设置B3单元格里的表达式:=valueat(ds1.Select(产品ID,false,产品ID%2==0),A3)

设置F3单元格的表达式:=valueat(ds1.Select(产品ID,false,产品ID%2!=0),A3)

预览效果如下图所示:

 

 

 

附录

1、selectEx函数说明

从数据集的当前行集中选取符合条件的记录。

 

语法:

 datasetName.selectEx(<select_exp>{filter_exp{, “sort_exp1, desc_exp1{;sort_exp2, desc_exp2{;…}}”{,rootGroupExp}}} )       

 

参数说明:

        select_exp    要选择的字段列名/列号,,也可以是表达式。

                    列号用#n表示,例如#0代表第0列,#1代表第1列,依此类推

        filter_exp    数据过滤表达式,如果全部选出,则此参数省略,仅用”,”占位。

        sort_exp1    数据排序表达式。按desc_exp1排序。

        desc_exp1    指定数据排序的顺序,true表示降序排列,false表示升序排列。

        sort_exp2    数据排序表达式。将sort_exp1相同的字段,按desc_exp2排序。

        desc_exp2    指定数据排序的顺序,true表示降序排列,false表示升序排列。

        rootGroupExp    是否root数据集表达式                              

 

返回值:

 一组数据的集合,数据类型由select_exp的运算结果决定。 

 

函数示例:

ds1.selectEx( name,sex==’1′,”name;grade,true”)从数据源ds1中选取性别为男性(’1′)的name字段列的值并升序排列,然后把姓名相同的按grade降序排列

 

2、valueat函数说明

根据指定位置返回数组或者集合表达式中的某一个元素

 

语法:valueat(arrayexp,suffixExp)

 

参数说明:

        arrayexp    数组或者集合表达式

        suffixExp    整数,用于指定返回集合中的第几个元素,以0开始计数

 

返回值:

集合中的一个元素,数据类型由集合中的元素类型决定

 

示例:

valueat(to(5,8),2)        返回值为:7