同字段数据多列显示的解决方案
问题描述
在制作报表时,需要将数据库表里一个字段的数据按照条件取值后分为多列显示。由于扩展格机制,用户会发现实现不了这样的需求。
本文将介绍一下如何用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