-
xxxl 数据领袖Lv6
发表于2021-2-25 17:11
楼主
本帖最后由 xxxl 于 2021-3-1 17:24 编辑
一、数组对象函数说明
在表达式中经常会用到数组对象,例如:
一维数组: [1,2,3,4]
二维数组: [[1,2,3],[2,3,4]]
当然表达式中也可以通过其它途径获得数组对象,比如ardb函数,或者是报表模板中的数据源等。
数组对象的属性以及方法可以看这个帖子https://bbs.esensoft.com/thread-133624-1-1.html
二、常见应用场景示例
2.1应用场景一 利用数组对象函数求带条件的平均值
需求场景:
需要取到按浮动顺序序号的前三个车型价格的平均值,利用数据对象来取值做到求出带条件的平均值。
表样设计:
公式说明:GRID2.C2$.select(@.value<=3).select(true,@.leftcell.value).avg(),
最后效果:
2.2应用场景二 利用数组对象函数返回数组内指定的值
需求场景:
需要取出浮动列中排名为第三名的省份名称,用find函数返回指定值的方法做。
表样设计:
公式说明:A2$[C2$.FIND("3")].txt。
C2$.FIND("3") 是返回数组中字段串为"3"的序号
A2$[C2$.FIND("3")].txt 则是取出C2$.FIND("3") 返回的序号对应的A2列的文本值
最后效果:
2.3应用场景三 利用数组对象函数求排名前几的数据
需求场景:
想要通过不改变浮动顺序也就是不使用_rk()函数的情况下取到前几名的数据,可以使用rank函数得到一个没有改变浮动顺序的排名,然后再通过数组对象来取到前几名或者后几名的数据。
表样设计:
公式说明:GRID1.B2$$.rank(GRID1.B2) 是对销售价格进行排名
GRID1.C2$.sort(true).mid(0,3).select(true,@.leftcell(2).txt).join(",")
.sort()是将C2浮动出来的数据降序排序,sort()=sort(false)默认为降序sort(true)为升序;
mid(0,3)是取排序后的前三项(即前三名)mid(index,len)index:整型(必须)len:整型(可选),返回指定的从数组第index个开始的长度为len的所有元素形成的一个行的数组;
select的作用的取这前三名对应的B2表元的值(字号列),join是吧前面返回的结果用逗号隔开转成字符串。
最后效果:
2.4应用场景四 利用数组对象函数做多层级排名
需求场景:
在设置排名的时候,常常会这样的需求,要展现一个数据在不同层级的排名这样复杂的效果,比如一个销售价格同时要求它所在省、市、县的排名展现在一个分析表中,这就需要借助到数组对象函数以及辅助行来做。
表样设计:
第一层浮动,钻取级次为县
第二层浮动,钻取级次为市
第三层浮动(注意最外层浮动包含了下面的辅助表元),钻取级次为省
公式说明:
GRID1.D2$.join(",") 是将市内所有销售价格取出加入顿号分开,注意这个辅助表元需要设置数据类型为字符型。
asstr(GRID1.D3).split(",").rank(D2),则是将顿号去掉根据D2值排序。最后隐藏辅助表元所在行。
最后效果:
2.5应用场景五 利用数组对象函数做多条件模糊查询
需求场景:
想要在输入框中输入多个条件,然后进行模糊查询。
表样设计:
过滤条件
公式说明:
<#=(@cs+"").split(",")#> 或<#=@cs.value.split(",")#>是去掉逗号','
.select(true,"XXB.BBQ like '%"+@+"%'") 使用.select方法将数组的每一项拼成字段名 like '%条件%'的形式
.join(" or ") 使用.join方法将数组转换成一个用or连接的字符串
通过上面的表达式在输入框输入01,02
会出来这样的过滤条件
最后效果:
2.6应用场景六 利用数组对象函数做数组行列转换
场景说明:
将这种格式的数组:[["32","201902","201902","201902"],["420000128","130427","410822","230223"]]
变成这种:[[32,420000128],[201902,130427],[201902,410822],[201902,230223]]
表样设计:
公式说明:<#=[A1$,B1$].matrix()#> 是行列转换函数将原来两个数组例如[["32","201902","201902","201902"],["420000128","130427","410822","230223"]]转置成[[32,420000128],[201902,130427],[201902,410822],[201902,230223]]
最后效果:
一、数组对象函数说明
在表达式中经常会用到数组对象,例如:
一维数组: [1,2,3,4]
二维数组: [[1,2,3],[2,3,4]]
当然表达式中也可以通过其它途径获得数组对象,比如ardb函数,或者是报表模板中的数据源等。
数组对象的属性以及方法可以看这个帖子https://bbs.esensoft.com/thread-133624-1-1.html
二、常见应用场景示例
2.1应用场景一 利用数组对象函数求带条件的平均值
需求场景:
需要取到按浮动顺序序号的前三个车型价格的平均值,利用数据对象来取值做到求出带条件的平均值。
表样设计:
公式说明:GRID2.C2$.select(@.value<=3).select(true,@.leftcell.value).avg(),
select(@.value<=3) 是取到C2$浮动列中值满足小于等于3这个条件的数据,
select(true,@.leftcell.value) 是取到这些数据的左侧的单元格的数据,
avg() 求平均值。
最后效果:
2.2应用场景二 利用数组对象函数返回数组内指定的值
需求场景:
需要取出浮动列中排名为第三名的省份名称,用find函数返回指定值的方法做。
表样设计:
公式说明:A2$[C2$.FIND("3")].txt。
C2$.FIND("3") 是返回数组中字段串为"3"的序号
A2$[C2$.FIND("3")].txt 则是取出C2$.FIND("3") 返回的序号对应的A2列的文本值
最后效果:
2.3应用场景三 利用数组对象函数求排名前几的数据
需求场景:
想要通过不改变浮动顺序也就是不使用_rk()函数的情况下取到前几名的数据,可以使用rank函数得到一个没有改变浮动顺序的排名,然后再通过数组对象来取到前几名或者后几名的数据。
表样设计:
公式说明:GRID1.B2$$.rank(GRID1.B2) 是对销售价格进行排名
GRID1.C2$.sort(true).mid(0,3).select(true,@.leftcell(2).txt).join(",")
.sort()是将C2浮动出来的数据降序排序,sort()=sort(false)默认为降序sort(true)为升序;
mid(0,3)是取排序后的前三项(即前三名)mid(index,len)index:整型(必须)len:整型(可选),返回指定的从数组第index个开始的长度为len的所有元素形成的一个行的数组;
select的作用的取这前三名对应的B2表元的值(字号列),join是吧前面返回的结果用逗号隔开转成字符串。
最后效果:
2.4应用场景四 利用数组对象函数做多层级排名
需求场景:
在设置排名的时候,常常会这样的需求,要展现一个数据在不同层级的排名这样复杂的效果,比如一个销售价格同时要求它所在省、市、县的排名展现在一个分析表中,这就需要借助到数组对象函数以及辅助行来做。
表样设计:
第一层浮动,钻取级次为县
第二层浮动,钻取级次为市
第三层浮动(注意最外层浮动包含了下面的辅助表元),钻取级次为省
公式说明:
GRID1.D2$.join(",") 是将市内所有销售价格取出加入顿号分开,注意这个辅助表元需要设置数据类型为字符型。
asstr(GRID1.D3).split(",").rank(D2),则是将顿号去掉根据D2值排序。最后隐藏辅助表元所在行。
最后效果:
2.5应用场景五 利用数组对象函数做多条件模糊查询
需求场景:
想要在输入框中输入多个条件,然后进行模糊查询。
表样设计:
过滤条件
公式说明:
<#=(@cs+"").split(",")#> 或<#=@cs.value.split(",")#>是去掉逗号','
.select(true,"XXB.BBQ like '%"+@+"%'") 使用.select方法将数组的每一项拼成字段名 like '%条件%'的形式
.join(" or ") 使用.join方法将数组转换成一个用or连接的字符串
通过上面的表达式在输入框输入01,02
会出来这样的过滤条件
最后效果:
2.6应用场景六 利用数组对象函数做数组行列转换
场景说明:
将这种格式的数组:[["32","201902","201902","201902"],["420000128","130427","410822","230223"]]
变成这种:[[32,420000128],[201902,130427],[201902,410822],[201902,230223]]
表样设计:
公式说明:<#=[A1$,B1$].matrix()#> 是行列转换函数将原来两个数组例如[["32","201902","201902","201902"],["420000128","130427","410822","230223"]]转置成[[32,420000128],[201902,130427],[201902,410822],[201902,230223]]
最后效果:
1个回答
很赞的总结呀
我也分享两个比较常用的数组函数应用场景:
1、数组函数应用实例-枚举下拉多选过滤
https://bbs.esensoft.com/thread-133428-1-1.html
2、对象表达式+数组应用实例--维ID字符串转名称显示
https://bbs.esensoft.com/thread-130270-1-1.html