20.9 其他函数
Case
函数说明:
一个条件函数,它的参数个数为2*n+1,n>=1。其中2n个参数为条件表达式,执行结果为true、false。从第一个条件开始,如果为true就返回它后边的值;否则判断下一个条件;如果所有条件为false,则返回最后一个参数的值。
函数语法:
Case(expression1,value1[,expression2,value2[…]],default)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
expression1 | 布尔表达式 | 数据集名称,常量需要用英文单引号包围,如’ds1’ | 是 |
value1 | 值表达式 | 布尔表达式1为ture时候返回value1值 | 是 |
default | 值表达式 | 布尔表达式都为false时候返回的默认值 | 是 |
返回值:
任何Report30支持的基本数据类型。
示例:
a1单元格值为0时返回male,为1时返回female,否则返回unknow:
Case(a1=0, ‘male’,a1=1, ‘female’, ‘unknow’)
EAPCodeList
函数说明:
返回符合条件的Code名称。它的参数个数为2,第一个参数为code类别,第二个参数为code值,这个函数是与EAP集成是使用的,依赖于EAP环境。
函数语法:
EAPCodeList(codeKind, codeValue)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
codeKind | 字符串 | Code类别 | 是 |
codeValue | 字符串 | Code值 | 是 |
返回值:
code名称。
示例:
得到CBAC011类的值为1的code名称:
EAPCodeList(‘CBAC011’, ‘1’)
Decode
函数说明:
与case函数相似,也是返回符合条件的值,没有符合条件的返回缺省值。不同的是,decode是对第一个参数求值后,与后边的参数中比较,相同返回下一个值,否则返回缺省值。
函数语法:
Decode(target, refer1, value1[,fefer2, value2[…]], default)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
target | 表达式 | 参数比较的基数 | 是 |
refer | 整型 | 与基数进行比较的值 | 是 |
value | 字符串 | 可能的返回值 | 是 |
default | 字符串 | 缺省值 | 是 |
返回值:
任何Report30支持的基本数据类型。
示例:
a1单元格值为0时返回male,为1时返回female,否则返回unknow:
Decode(a1,0, ‘male’,1, ‘female’, ‘unknow’)
Index
函数说明:
取得集合中第N个元素的值。
函数语法:
Index(collection_value, n)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等 | 是 |
n | 整型 | 索引值 | 是 |
返回值:
集合中第N个元素的值(N为负数则表示倒数第N个元素的值)。如果collection_value为空,或者n大于collection_value的长度,返回NullDataValue。
示例:
返回select结果中的第1个:
Index(select(‘ds1’, ‘city’),1)
Indexof
函数说明:
求某个元素在集合中的索引值。
函数语法:
IndexOf(collection_value, object )
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等。 | 是 |
object | 不限 | 任何Report30支持的变量 | 是 |
返回值:
Object在collection_value中的索引值,索引从0开始;如果Object不在collection_value中,返回-1;如果collection_value为空也返回-1。
示例:
得到select结果中“大连”的索引值:
IndexOf(select(‘ds1’, ‘city’), ‘大连’)
SortedIndexOf
函数说明:
求某个元素在排序后的集合中的索引值。
函数语法:
SortedIndexOf(collection_value, object, isAsc, key)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等。 | 是 |
object | 不限 | 任何Report30支持的变量 | 是 |
isAsc | 布尔型 | 指定集合的排序方式是否为升序,true为升序,false为降序 | 是 |
key | 字符串 | 为提高执行效率,会将集合排序后的结果缓存起来,避免重复排序。这个参数为排序结果指定一个用于缓存的键值,可以是任意的字符串,缺省时使用默认的key值。注意:如果一张报表中多次使用这个公式,则必须为每个不同的排序结果指定唯一的key值。 | 否 |
返回值:
Object在排序后的collection_value中的索引值,索引从0开始;如果Object不在collection_value中,返回-1;如果collection_value为空也返回-1。
示例:
以下公式调用将返回3:
SortedIndexOf(List(2,1,3,5,4), 4, true, ‘1’)
SeqNum
函数说明:
求某个元素在集合中的索引值,与依赖关系一起使用。
函数语法:
SeqNum(string)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
string | 字符串 | seqNum公式的唯一标识 | 否 |
返回值:
当前单元格在复制出的所有单元格中的序号,序号从1开始。
示例:
数据列表报表定义如下,其中A1格依赖于B1格:
A1 | B1 |
---|---|
=seqNum() | =group(‘ds1’, ‘city’) |
页面展现效果如下:
Extract
函数说明:
取被分隔符分隔的字符串
函数语法:
Extract(matchString,chStart,chEnd[,matchType])
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
matchString | 字符串 | 被分隔源字符串 | 是 |
chStart | 字符串 | 起始字符 | 是 |
chEnd | 字符串 | 结束字符 | 是 |
matchType | 整数 | 匹配类型。如果为1,严格匹配;如果为0,模糊匹配。默认值为0。 | 否 |
返回值:
被分隔后的源字符串。
示例:
=Extract(‘[I am chinese]I am a worker’,’[’,’]’,1)
Intersection
函数说明:
求两个集合的交集
函数语法:
Intersection(cdvA,cdvB)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
cdvA | 集合 | 集合A | 是 |
cdvB | 集合 | 集合B | 是 |
返回值:
cdvA与cdvB的交集
示例:
求集合{1,2,3}和集合{2,5,6}的交集,得到{2}:
Intersection (list(1,2,3),list(2,5,6))
IndexOfString
函数说明:
对照源字符串查找初目标字符串首次出现的位置。
函数语法:
IndexOfString(srcString,desString)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
srcString | 字符串类型 | 源字符串 | 是 |
desString | 字符串类型 | 目标字符串 | 是 |
返回值:
整数,表示目标字符串在源字符串中的索引位置。
示例:
=IndexOfString(‘iamachineseworker’ , ’chinese’)
TopPercent
函数说明:
用于80/20分析, 求集合中前百分之X的值对应的集合。 第一个参数为一个集合,值为数值类型;第二个参数为百分比。
函数语法:
TopPercent(collection_value, percent)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 需要过虑的集合 | 是 |
percent | 整形 | 百分比 | 是 |
返回值:
过虑后的集合。
示例:
TopPercent(list(1,2,3,4,5), 20)
Length
函数说明:
求指定串的长度。
函数语法:
length(string)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
string | 字符串 | 字符串变量或常量 | 否 |
返回值:
String的长度值。
示例:
求字符串aaa123++的长度:
Length(‘aaa123++’)
TopN
函数说明:
取得集合中前/后N个元素组成的子集合。
函数语法:
TopN(collection_value, count,b)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等。 | 是 |
count | 整型 | 取的位数 | 是 |
b | 布尔型 | 集合中不足部分是否补足,如果为true则不足部分用Null补足;如果为false则不补足 | 否 |
返回值:
返回一个包含count个元素的集合。如果原集合中元素个数大于等于count,返回前count个元素组成集合;如果原集合中元素个数小于count且第三个参数为false,返回集合中不足部分用Null补足;如果集合为空,返回count个Null组成的集合;如果第三个参数为true,集合中不足部分用Null补足。
示例:
得到集合的前三个元素的集合,分别得到(1,2,3)、(1,2)、(Null,Null,Null):
TopN(list(1,2,3,4,5),3)
TopN(list(1,2),3,false)
TopN(list(),3)
得到集合的后二个元素的集合,分别得到(4,5)、(1)、(Null,Null):
TopN(list(1,2,3,4,5),-2)
TopN(list(1),-2,false)
TopN(list(),-2)
TopN2
函数说明: 取得排序集合中前N个元素组成的子集合,这种函数一般只能应用到有序集合。 函数语法: TopN2(collection_value, count) 参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等。 | 是 |
count | 整型 | 取的位数 | 是 |
返回值:
返回一个包含count个元素的集合。如果原集合(需排序)中元素个数大于等于count,返回前count个元素(包括并列情况)组成集合;如果原集成中元素个数小于count,返回原集合。
示例:
取得集合的前三个元素的集合,分别得到(1,2,3)、(1,2)、(l,2,3,3):
TopN2(list(1,2,3,4,5),3)
TopN2(list(1,2),3)
TopN2(list(1,2,3,3,4),3)
List
函数说明:
把它的参数以集合的形式返回。
函数语法:
List(arg1[,arg2[…,argn]])
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
arg1 | 变量 | 任何Report30支持的变量,但通常所有参数变量类型相同 | 是 |
返回值:
由所有参数组成的集合对象,可以用于作为某些定义为集合类型的参数。
示例:
得到1,2,3组成的集合、三个城市的集合:
List(1,2,3)
List(‘沈阳’, ‘大连’, ‘鞍山’)
Nvl
函数说明:
如果第一参数为空,返回第二个参数;否则返回第一个参数。一般用于定义缺省值。
函数语法:
Nvl(arg1,arg2)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
arg1 | 变量 | 任何Report30支持的变量,但通常所有参数变量类型相同 | 是 |
arg2 | 变量 | 任何Report30支持的变量,但通常所有参数变量类型相同 | 是 |
返回值:
如果第一参数为空,返回第二个参数;否则返回第一个参数。
示例:
如果从数据集中取得的年龄为空,返回27作为缺省年龄:
Nvl(get(‘ds1’, ‘age’), ‘27’)
Rgb
函数说明:
根据R/G/B值指定颜色。一般用于定义背景色、前景色。
函数语法:
Rgb(r,g,b)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
R | 整型 | 红色 | 是 |
G | 整型 | 绿色 | 是 |
B | 整型 | 蓝色 | 是 |
返回值:
颜色值。
示例:
黑色、白色:
Rgb(0,0,0)
Rgb(255,255,255)
Sort
函数说明:
把集合参数按升序或降续排列。排序是根据集合元素值的自然顺序:数字按照值大小,字符串按字典顺序,时间按时间先后等。
函数语法:
Sort(collection_value, isAsc)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 需要排序的集合 | 是 |
isAsc | 布尔 | 排序方向 | 是 |
返回值:
排序后的集合。
示例:
得到0,1,2,3,4的集合:
Sort(list(0,1,4,3,2),true)
NextElement
函数说明:
取得集合中指定元素的下一个元素。
函数语法:
nextElement(collection_value, object)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等。 | 是 |
object | 不限 | 任何Report3.0支持的变量 | 是 |
返回值:
指定元素的下一个元素,若集合中不存在该元素的下一个元素则为null。
示例:
获取元素d后面的元素f:
NextElement(list(‘a’, ‘b’, ‘d’, ‘f’, ‘z’), ‘d’)
PreElement
函数说明:
取得集合中指定元素的上一个元素。
函数语法:
nextElement(collection_value, object)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等。 | 是 |
object | 不限 | 任何Report3.0支持的变量 | 是 |
返回值:
指定元素的上一个元素,若集合中不存在该元素的上一个元素则为null。
示例:
获取d前面的元素b:
PreElement(list(‘a’, ‘b’, ‘d’, ‘f’, ‘z’), ‘d’)
IsNull
函数说明:
判断一个DataValue是否为Null。
函数语法:
isNull(object)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
object | 不限 | 任何Report3.0支持的变量 | 是 |
返回值:
布尔值,true表示对象为null,false表示不为null。
示例:
判断a1单元格的值是否为空:
isNull(cell(‘a1’))
Like
函数说明:
判断一个指定的字符串是否完全匹配一个正则表达式。
函数语法:
Like(regex, string)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
regex | 正则表达式 | 一个符合Java正则表达式规范的字符串表达式 | 是 |
string | 字符串 | 一个待匹配的字符串表达式 | 是 |
返回值:
匹配结果的布尔值,true为完全匹配,false为不完全匹配。
示例:
Like(‘编号\s*\d{3}’, ‘编号 008’)
Like(‘.*国’, ‘英国’)
In
函数说明:
判断一个对象是否存在于指定的集合中。
函数语法:
In(collection_value, object)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
collection_value | 集合 | 可能来自另一个集合公式,如group、select、cell、to、list等。 | 是 |
object | 不限 | 任何Report3.0支持的变量 | 是 |
返回值:
布尔值,true为存在,false为不存在。
示例:
判断5是否存在于集合list(1,2,3,5,6):
In(list(1,2,3,5,6), 5)
Digit
函数说明:
取指定数字的整数位的值。
函数语法:
Digit(n, bit)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
n | 整型 | 指定的数字 | 是 |
bit | 整型 | 要取的位数,如取十位,bit=10;取百位bit=100 | 是 |
返回值:
返回整数位的值。
示例:
得到123的十分位2:
Digit(123, 10)
OpenReport
函数说明:
关联到某一报表。
函数语法:
OpenReport(reportId,paramName1,paramValue1…)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
reportId | 字符串 | 关联的报表ID | 是 |
paramName | 字符串 | 传递的参数名称 | 否 |
paramValue | 不限 | 传递的参数值,可以是字符串、整型、日期等 | 否 |
返回值:
关联到另一张报表。
示例:
打开报表id为12e32-23f4的报表,将参数name赋值为小明:
OpenReport(‘12e32-23f4’,’name’, ‘小明’)
GraphOpenReport
函数说明:
与OpenReport类似,都是关联到某一报表,但只能用于图表和地图。
与OpenReport公式的区别在于,使用此公式,钻取到关联报表时页面会出现导航条,支持回退功能。
函数语法:
GraphOpenReport(reported,paramName1,paramValue1,…,openPosition)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
reportId | 字符串 | 关联的报表ID | 是 |
paramName | 字符串 | 传递的参数名称 | 否 |
paramValue | 不限 | 传递的参数值,可以是字符串、整型、日期等 | 否 |
openPosition | 字符串 | 指定关联报表的打开位置。可选值包括:_top(顶层窗口)、_parent(父窗口)、_self(本窗口)、_blank(新建窗口)、其他当前页面中iframe的名称。 | 是 |
返回值:
关联到另一张报表。
示例:
在当前窗口打开报表id为12e32-23f4的报表,将参数name赋值为小明:
GraphOpenReport(‘12e32-23f4’,’name’, ‘小明’, ‘_self’)
ChartOpenReport
函数说明:
与OpenReport类似,都是关联到某一报表,只用于新图表。
使用此公式,钻取到关联报表时页面会出现导航条,支持回退功能。
函数语法:
ChartOpenReport(reported,paramName1,paramValue1,…)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
reportId | 字符串 | 关联的报表ID | 是 |
paramName | 字符串 | 传递的参数名称 | 否 |
paramValue | 不限 | 传递的参数值,可以是字符串、整型、日期等 | 否 |
返回值:
关联到另一张报表。
示例:
在当前窗口打开报表id为12e32-23f4的报表,将参数name赋值为小明:
ChartOpenReport(‘12e32-23f4’,’name’, ‘小明’)
ChartLink
函数说明:
与OpenReport类似,用于图表联动,只用于新图表。
函数语法:
ChartLink(reported,chartId,paramName1,paramValue1,…)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
reportId | 字符串 | 关联的报表ID | 是 |
chartId | 字符串 | 图表位置 | 是 |
paramName | 字符串 | 传递的参数名称 | 否 |
paramValue | 不限 | 传递的参数值,可以是字符串、整型、日期等 | 否 |
返回值:
被联动图表刷新。
示例:
联动A1位置图表,将参数name传递给图表:
ChartLink(‘12e32-23f4’,‘A1‘,’name’, ‘小明’)
OpenReportJS
函数说明:
关联其他报表且最大化窗口弹出。
函数语法:
OpenReportJS(reportId,paramName1,paramValue1…)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
reportId | 字符串 | 关联的报表ID | 是 |
paramName | 字符串 | 传递的参数名称 | 否 |
paramValue | 不限 | 传递的参数值,可以是字符串、整型、日期等 | 否 |
返回值:
关联到另一张报表。
示例:
打开报表id为12e32-23f4的报表,将参数name赋值为小明:
OpenReportJS(‘12e32-23f4’,’name’, ‘小明’)
ServerURL
函数说明:
获得服务的相对路径。
函数语法:
ServerURL()
返回值:
返回应用服务的相对路径。
示例:
得到http://127.0.0.1/unireport的相对路径/unireport/:
ServerURL()
Calljs
函数说明:
调用指定的JavaScript函数。
函数语法:
Calljs(funcName, param[,..])
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
funcName | 字符串 | 调用JavaScrip的函数名 | 是 |
param | 字符串 | 函数中的参数 | 是 |
示例:
调用hint函数,参数为hello:
Calljs(hint, 'hello')
BlobText
函数说明:
在报表定义中引入来自数据库Blob字段的文字。
函数语法:
BlobText(repository_name, dataentitiy_name, field_name, keys, key_values, encoding)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
repository_name | 字符串 | DRM数据源名 | 是 |
dataentitiy_name | 字符串 | 文字所在表名 | 是 |
field_name | 字符串 | 文字对应字段名 | 是 |
keys | 字符串列表 | 定位文字的键名称列表 | 是 |
key_values | 值列表 | 定位文字的键值列表,如果是多个域keys的顺序一一对应 | 是 |
Encoding | 字符串 | BLOB中字符串的字符编码 | 是 |
返回值:
StringDataValue,对应blob字段的文本值。
示例:
BlobText(‘ northwind’, ‘blobtext’, ‘blob’,list(‘id’),list(A2) ,'GBK')
Encode
函数说明:
通过超链接或者OpenReport公式实现图表钻取时,会出现传递的参数为中文的情况,这时需要使用本函数对中文参数进行编码,并增加encode=true的参数。
函数语法:
Encode(srcObj,enCod)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
SrcObj | 参数值 | 是 | |
EnCod | 编码方式 | 现仅有一种编码方式‘base64’ | 是 |
返回值:
经过编码之后的字符串。
示例:
将参数‘中国’进行base64编码:
Encode(‘中国’,’base64’)
Not
函数说明:
对布尔型数据进行取反操作。
函数语法:
Not(booleanValue)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
booleanValue | 布尔类型 | 要进行取反的布尔值 | 是 |
返回值:
取反后得到的布尔值。
示例:
Not(true)
CrossTabDataFunc
函数说明:
新图表的数据来自交叉表时,需要使用该公式,该公式具有4个参数,第一个参数为横向扩展单元格,第二个参数为纵向扩展单元格,第三个参数为数据单元格,最后一个参数为整型数据,只能输入1,2,3三个值。
其中,该函数会将前两个集合数据进行扩展,使得扩展后的集合元素个数与三个集合元素个数相同,最后根据最后一个参数决定返回第几个集合数据。
【注】:该公式希望第一个集合参数中没有重复数据,若存在重复数据,该公式会为重复数据自动加上标识用来区分;同理第二个参数也会做同样处理。
样例讲解: CrossTabDataFunc(list(’A’,’B’),list(’a’,’b’),list(1,2,3,4),count)
第一个集合扩展后为{’A’,’B’,’A’,’B’}、第二个参数扩展后为{’a’,’a’,’b’,’b’},第三个参数不需要扩展{1,2,3,4};
若最后一个参数count为1,则返回第一个参数集合,{’A’,’B’,’A’,’B’}.
若最后一个参数count为2,则返回第二个参数集合,{’a’,’a’,’b’,’b’}.
若最后一个参数count为3,则返回第三个参数集合,{1,2,3,4}.
函数的约束:
前两个集合参数的元素个数的乘积,必须等于第三个集合参数的元素个数。若不满足此条件,函数会抛出异常。
函数语法:
CrossTabDataFunc(row_collection,column_collection,value_collection,count)
参数说明:
名称 | 数据类型 | 说明 | 是否必需 |
---|---|---|---|
row_collection | 一个集合 | 可能来自另一个集合公式,如group、list、to、cell等 | 是 |
column_collection | 一个集合 | 可能来自另一个集合公式,如group、list、to、cell等 | 是 |
Value_collection | 数据集合 | 可能来自另一个集合公式,如group、list、to、cell等 | 是 |
count | 整型 | 取哪个集合,只有1,2,3三个选项 | 是 |
返回值:
返回经过函数处理后的集合。
示例:
CrossTabDataFunc(cell(‘b2’),cell(‘a3’),cell(‘b3’),3)