数组对象

6700
2

1505121235 数据老手Lv5

发表于2019-9-29 21:31

楼主
简介
在表达式中经常会用到数组对象,例如:
一维数组:  [1,2,3,4]
二维数组:  [[1,2,3],[2,3,4]]
当然表达式中也可以通过其它途径获得数组对象,比如ardb函数,或者是报表模板中的数据源等,数组对象有下列属性和方法

属性:
名称
描述
size或者length
返回数组的长度

取数组元素:
使用中括号[]来索引数组元素, []里面填索引序号,获取相应的数组成员(元素)。
形如:A2$=[3,5,8,7]
举例
返回值
说明
[3,5,8,7][2]
8
取数组的第3个元素
A2$[1]
5
取A2$数组的第2个元素
A2$[-1]
7
取A2$数组的最后一个元素
A2$[-2]
8
取A2$数组的倒数第二个元素
注意:
1.为了提高易用性,当索引为负数时,含义是倒序取数组元素。但负数太小(加上数组长度仍为负数)时,返回null。
2.当索引值越界后,为了友好性,不直接报越界错误,返回null。正向边界是数组长度(不包括),逆向边界是负的数组长度(包括)。

数组方法:
名称
适用对象
参数
示例
描述
sum()
一维数值型数组
[1,2].sum()返回3
求一维数值型数组的所有元素的和
avg()
一维数值型数组
[1,2].avg()返回1.5
求一维数值型数组的所有元素的平均值
min()
一维数组
['a','b'].min()返回a
求一维数组的所有元素中的最小值
max()
一维数组
[1,2].max()返回2
求一维数组的所有元素中的最大值
join(sep,acceptNull)
全部数组
sep:分隔符(必须)
acceptNull:是否接受空值(可选)
[1,2].join(',')返回1,2
[1,6,8,null,"abc","""","\"\""].join(",",true)
返回1,6,8,,abc,,,""
将数组中的每个元素连接起来,每个元素之间用指定的分隔符分割,返回连接后的字符串,如果有第2个参数且
为true那么将使用空串替换其中的null值和空值,否则忽略(不加入到结果中)
select(filter,itemproc)
全部数组
filter:传递一个条件过滤表达式,表达式中
可以使用@符号引用当前的数组元素(必须)
itemproc:传递一个节点处理表达式,表达式中
可以使用@符号引用当前的数组元素(可选)
[1,2,3].select(@>1)将返回[2,3]
[[1,2],[2,3],[3,4]].select(@[0]>1,@[1]).join(';')返回3;4
根据指定的过滤条件表达式过滤数组,将满足条件的元素形成一个新的数组返回
get(filter)
全部数组
filter:传递一个条件过滤表达式,表达式中
可以使用@符号引用当前的数组元素(必须)
[1,2,3].get(@>1)返回2
根据指定的过滤条件表达式过滤数组,返回满足条件的第一个元素
find(element)
一维数组
element:任意变量(必须)
['a','b','c'].find('b')返回1
返回指定的参数在数组中的序号,大小写敏感,如果找不到返回-1
search(element)
一维数组
element:任意变量(必须)
['a','b','c'].search('B')返回1
返回指定的参数在数组中的序号,大小写不敏感,如果找不到返回-1
mid(index,len)
全部数组
index:整型(必须)
len:整型(可选)
['a','b','c'].mid(1)返回['b','c']
['a','b','c'].mid(0,2)返回['a','b']
返回指定的从数组第index个开始的长度为len的所有元素形成的一个行的数组
sort(asc)
一维数组
sort()=sort(false),默认是降序,sort(true)为升序
数组前三名:
A2$.sort()[0].value
A2$.sort()[1].value
A2$.sort()[2].value
数组后三名:
A2$.sort(true)[0].value
A2$.sort(true)[1].value
A2$.sort(true)[2].value

返回排序后的新的数组
rank(element,asc)
一维数组
element:任意变量(必须)
asc:true(升序),false(降序),不设默认降序
['e','b','a','c'].rank('a')返回4
['e','b','a','c'].rank('a',true)返回1
返回指定的参数在数组中的排名
getcol(index)
多维数组
index:整型(必须)
[ [1,2,3] , [2,3,4] ].getcol(0)返回[1,2]
对于多维数组,此函数返回多维数组中每一维数组的第index个元素所形成的一个新的数组
split(len)
一维数组
len:整型(必须)
[1,2,3,4].split(2) 返回 [[1,2],[3,4]]
把一个一维数组分隔成多维数组,如[1,2,3,4].split(2) -> [[1,2],[3,4]]
用途:当一个表是交叉表时,如果要以二维数组的形式引用浮动出来的指标可以使用 B2$$.split(A2$.length)
distinct()

[1,2,2,4].distinct() 返回[1,2,4]
去掉数组中的重复项

数组加减
数组对象是支持加法和减法操作的,例如:
[1,2,3]+[4,5] 返回 [1,2,3,4,5]
[1,2,3]+4+5 返回 [1,2,3,4,5]
[1,2,3, 4]-[4,5] 返回 [1,2,3]
[1,2,3, 4]-4 返回 [1,2,3]

补充:
1.浮动维表元浮动出来的值,也是一个数组,例如 C3$$,表示是表元C3浮动出来的值,对C3浮动出来的值进行排名,
C3$$.rank(C3)
SQL数据源也是一个数组对象,例如,报表模板中定义一个SQL数据源rs1 (select name, cost  from xxxx),rs1就可以看作是一个二维数组对象。要对cost求和,rs1.getcol(1).sum()

2.表元数组的几种写法:
1、A1$:A1是浮动维表元,A1$是它浮动出来的所有实例
2、A1:A4:表元数组,含4个元素A1,A2,A3,A4
3、[A1,A2,A3,A4]:等价于A1:A4
4、A1:K4:表元数组,注意是一维的。
易混淆的写法:
1、[A1:A4]:这等价于[[A1,A2,A3,A4]],这是一个二维数组。
2、[A1$,B1$]:这是一个二维数组,数组中含2个元素,第一个元素是A1$,它也是一个数组。

3.合并两个一维数组,可以直接使用+号,例如:
(1..6)+(10..13) = [1,2,3,4,5,6,10,11,12,13]

4.数组行列转换用.matrix()或者math.transpose()

重要:
字符串可以通过split函数返回一个数组,如:
="a,b,c,e,f,z".split(",'')
分隔符为特殊字符时,要在分隔字符参数值前面加转义符"\"(实际使用时,发现没有按期望分隔字符串的字符加个\后再看效果)。
常见的特殊字符有:()|.+*[{^$?\
下拉维多选或下拉枚举多选时,计算结果表中可通过@paramname.value取到多选参数值,通常格式为
value1|value2|value3..
即用竖线作为分隔符。在BI中使用字符串.split分隔它时,"|"是一个特殊字符,需要在前面加个转义符"\",eg:@bwb.value="00|01",则
@bwb.value.split("\|")可得到已选参数值的数组格式,@bwb.value.split("\|").join(",")可修改其中的分隔符(|)为逗号(,)得到逗号分隔的普通串
split与join是一对数组与字符串转换的函数,split把符合格式要求的字符串拆分成数组对象,join把数组对象用指定连接符连接为字符串。




最近看过此主题的会员

lngzh

liwm

梧桐树2255

esen_4YTY8WD4QV

v笑向前走

wli0402

金12

esen_4XH2QRUZD7

MYoung

esen_4TUELCHD9M

sddfvcww

chenzyd

esen_4Y3L5ADO80

qinfangfang

cghb

2个回答

只看楼主

辰哥 管理员

发表于2019-12-5 14:48

只看该作者

取消 关注该作者的回复

沙发

很棒的干货分享!

liuxiaolong 初学数据Lv2

发表于2020-8-14 16:17

只看该作者

取消 关注该作者的回复

板凳

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号