Skip to content

函数

概述

在UReport2当中提供了大量的内置函数,通过这些内置函数,可以实现各种各样的报表计算功能。

函数语法格式

函数名([表达式,表达式...])

常用函数

1.count函数(统计数量)

示例说明
count(C1,C2)统计相对当前所在单元格,目标C1单元格以及C2单元格加在一起的数量
count(C1)统计相对当前所在单元格,目标C1单元格数量
count(C1{age>20},C2{salary>2000 and degree=='本科'})统计相对当前所在单元格,目标C1单元格绑定对象的age属性大于20的C1单元格以及C2单元格绑定对象的salary属性大于2000同时degree属性等于本科的单元格数量
count(C1{age>20})统计相对当前所在单元格,目标C1单元格绑定对象的age属性大于20的C1单元格数量/

2.sum函数(累加)

示例说明
sum(C1)相对当前单元格,取到所有C1单元格值进行累加
sum(C1{age>20})相对当前单元格,取到所有绑定对象属性age大于20的C1单元格值进行累加
sum(C1,C2)相对当前单元格,取到所有C1和C2单元格的值进行累加
sum(C1{age>20},C2{salary>2000 and degree=='本科'})相对当前单元格,取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行累加/

3.avg函数(求平均值)

示例说明
avg(C1)相对当前单元格,求C1单元格的平均值
avg(C1{age>20})相对当前单元格,取到绑定对象属性age大于20的C1单元格值的平均值
avg(C1,C2)相对当前单元格,求C1和C2单元格的平均值
avg(C1{age>20},C2{salary>2000 and degree=='本科'})相对当前单元格,取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行求平均值/

4.max函数(求最大值)

示例说明
max(C1)相对当前单元格,求C1单元格的最大值
max(C1{age>20})相对当前单元格,取到绑定对象属性age大于20的C1单元格值的最大值
max(C1,C2)相对当前单元格,求C1和C2单元格的最大值
max(C1{age>20},C2{salary>2000 and degree=='本科'})相对当前单元格,取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行求最大值/

5.min函数(求最小值)

示例说明
min(C1)相对当前单元格,求C1单元格的最小值
min(C1{age>20})相对当前单元格,取到绑定对象属性age大于20的C1单元格值的最小值
min(C1,C2)相对当前单元格,求C1和C2单元格的最小值
min(C1{age>20},C2{salary>2000 and degree=='本科'})相对当前单元格,取到所有绑定对象属性age大于20的C1单元格值以及绑定对象属性salary大于2000且degree属性等于本科的C2单元格的值进行求最小值/

6.row函数(取行号)

示例说明
row()取当前单元格所在行的行号

7.column函数(取列号)

示例说明
column()取当前单元格所在列的列号

8.order函数(排序)

示例说明
order(C1,false)相对当前单元格,取到所有C1单元格值,对这些值进行倒排序,返回排序好的结果集合
order(C1{age>18},true)相对当前单元格,取到与C1单元格绑定的对象属性age值大于18的所有C1单元格值,对这些值进行正排序,返回排序好的结果集合

9.list函数(罗列数据)

示例说明
list(C1)相对当前单元格,取到所有C1单元格值以集合形式返回
list(C1{age>18})相对当前单元格,取到所有C1单元格值及C2单元格中age属性大于20的所有C2单元格值以集合形式返回

10.param函数(取参数)

示例说明
param("deptId")获取外部传入的名为deptId的参数值
param(C1)相对于当前单元格,取到C1单元格的值,如果有多个C1单元格则么第一个,然后以这个C1单元格值作为参数名称,获取外部对应的参数值。

11.emptyparam函数(判断参数是否为空)

emptyparam函数用于判断指定的外部参数是否为null或空字符串,如果是返回true,否则返回false。
emptyparam函数一般用于SQL数据集SQL表达式里,比如下面的写法:

jsp
${
   "select * from employee where 1=1 "+ (param("name")!=null && param("name")!="" ? "name=:name" : "")
}

上述的SQL判断采用的是param函数,由于要同时判断为null以及"",写起来比较麻烦,如改用emptyparam函数就简单多了。

jsp
${
   "select * from employee where 1=1 "+ (emptyparam("name")==false ? "and name=:name" : "")
}

12.formatdate函数(格式化日期)

示例说明
formatdate(C1)取到C1单元格值,这个值必须是日期类型,然后按yyyy-MM-dd HH:mm:ss来进行格式化成字符串输出
formatdate(C1,"yyyyMMdd")取到C1单元格值,这个值必须是日期类型,然后按yyyyMMdd来进行格式化成字符串输出

13.formatnumber函数(格式化数字)

示例说明
formatnumber(C1)formatnumber(C1)
formatnumber(C1,"#,###.00")取到C1单元格值,这个值必须可以转换成数字,然后按#,###.00来进行格式化成字符串输出

14.get函数(获取指定位置数据)

示例说明
get(ds1.select(employee_name))从ds1数据集中获取第1个对象值,并将其返回。第二个位置参数没有指定默认取集合第一个对象
get(ds1.select(employee_name),2)从ds1数据集中获取第2个对象值,并将其返回。
get(ds1.select(employee_name),2,"deptId")从ds1数据集中获取第2个对象值,并从这个对象里取deptId属性值并返回。
get(A3,4)获取所有A3单元格值,从中取第四个值并返回。/

分页相关函数

所谓分页相关函数,是指这些函数是在分页的时候进行计算,比如计算当前页有多少条记录、当前页某个单元格值累加后是多少、平均值是多少、最大值是多少等等。

分页相关函数使用

一般来说,分页相关函数多用在行类型为“重复表头”或“重复表尾”的行中的单元格里。 同时,需要注意的是,分页相关函数只会在分页预览时显示,这点需要注意。

1.pcount函数

示例说明
pcount(C1)统计当前页中,C1单元格数目
pcount(C1,D2{D2>10000})统计当前页中,C1单元格和当前页中所有D2单元格值大于10000的D2单元格数目

2.psum函数

示例说明
psum(C1)将当前页中,所有C1单元格值进行累加
psum(C1,D2{D2<10000})将当前页中,所有C1单元格值以及值小于10000的D2单元格值累加起来

3.page函数

示例说明
page()输出当前所在页的页码

4.pages函数

示例说明
pages()输出当前报表一共有多少页

pages函数的使用范围

pages函数目前仅能在页眉页脚中使用

数学函数

1.abs函数(绝对值)

求参数的绝对值,参数值计算后数据类型必须是数字,否则会报错。

示例说明
abs(-233)求-233绝对值,计算后的值是233
abs(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值返回其绝对值

2.ceil函数(最小值)

对参数值取最小值,如果参数值为小数将舍弃小数点后面的小数部分,参数值计算后数据类型必须是数字,否则会报错。

示例说明
ceil(32.32)计算后值为32
ceil(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值返回其最小值

3.floor函数(最大值)

对参数值取最大值,如果参数值为小数将四舍五入小数点后面的小数部分,参数值计算后数据类型必须是数字,否则会报错。

示例说明
floor(32.52)计算后值为33
floor(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值返回其最大值

4.chn函数(数字转中文)

将一个数字转化成中文,参数值计算后数据类型必须是数字,否则会报错。

示例说明
chn(213)计算后的值为:贰佰壹拾叁
chn(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值,再转化成中文

chn函数使用注意事项

chn函数转换数字即可是整数,也可是小数,如果是小数支持后面最多两位小数,如果实际小数过多,chn函数会先进行四舍五入,然后再进行转换。

5.rmb函数(数字转换为大写的人民币金额)

将一个数字转换成中文大写的人民币金额,参数值计算后数据类型必须是数字,否则会报错。

示例说明
rmb(213)计算后的值为:贰佰壹拾叁元整
rmb(200.12)计算后的值为:贰佰元壹角贰分
rmb(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值,再转化成中文大写的人民币金额

rmb函数使用注意事项

rmb函数转换数字即可是整数,也可是小数,如果是小数支持后面最多两位小数,如果实际小数过多,rmb函数会先进行四舍五入,然后再进行转换。

6.cos函数(求余弦)

求参数的余弦值,参数值计算后数据类型必须是数字,否则会报错。

示例说明
cos (213)计算后的值为:0.809027625286430
cos(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值返回其余弦值

7.sin函数(正弦)

求参数的正弦值,参数值计算后数据类型必须是数字,否则会报错。

示例说明
sin(213)计算后的值为:-0.58777
sin(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值返回其正弦值

8.tan函数(正切)

求参数的正切值,参数值计算后数据类型必须是数字,否则会报错。

示例说明
tan(213)计算后的值为:-0.72651
tan(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值,再求其正切值

9.exp函数(方法用于返回自然数底数e的参数次方)

求参数的自然数底数e的参数次方,参数值计算后数据类型必须是数字,否则会报错。

示例说明
exp(213)计算后的值为:3.196867565323994E921
exp(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值,再求其自然数底数e的参数次方

10.log10函数(返回以10为底的对数值)

求参数以10为底的对数值,参数值计算后数据类型必须是数字,否则会报错。

示例说明
log10(213)计算后的值为:2.3283796034387376
log10(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值,再求其以10为底的对数值

11.log函数(自然对数)

求参数自然对数值,参数值计算后数据类型必须是数字,否则会报错。

示例说明
log(213)计算后的值为:5.3612921657094255
log(C1)相对当前单元格,取到C1单元格的值,如果有多个则取第一个值,再求其自然对数值

12.median函数(中位数)

求一组数据的中位数,参数值计算后数据类型必须是数字,否则会报错。

示例说明
median(12,42,31)运行结果为31
median(C1)相对当前单元格,取到C1单元格的所有值,再取这些值中位数
median(C1,C2)相对当前单元格,取到C1单元格和C2单元格的所有值,再取这些值中位数

13.mode函数(众数)

求一组数据的众数,参数值计算后数据类型必须是数字,否则会报错。

示例说明
mode(12,42,3,12)运行结果为12
mode(C1)相对当前单元格,取到C1单元格的所有值,再取这些值众数
mode(C1,C2)相对当前单元格,取到C1单元格和C2单元格的所有值,再取这些值众数

14.vara函数(方差)

求一组数据的方差,参数值计算后数据类型必须是数字,否则会报错。

示例说明
vara(12,42,3,12)运行结果为209.25
vara(C1)相对当前单元格,取到C1单元格的所有值,再取这些值方差
vara(C1,C2)相对当前单元格,取到C1单元格和C2单元格的所有值,再取这些值方差

15.stdevp函数(标准差)

求一组数据的标准差,参数值计算后数据类型必须是数字,否则会报错。

示例说明
stdevp(12,42,3,12)运行结果为14.75424
stdevp(C1)相对当前单元格,取到C1单元格的所有值,再取这些值标准差
stdevp(C1,C2)相对当前单元格,取到C1单元格和C2单元格的所有值,再取这些值标准差

16.pow函数(返回第一个参数的第二个参数次方)

pow函数需要两个参数,第一个为需要计算的数字或表达式,第二个为具体的次方。

示例说明
pow(3,2)表示计算3的2次方值,运算后的结果为9
pow(C1,3)相对当前单元格,取到C1单元格的值,如果取到的C1单元格有多个,则取第一个,再对其值求3次方

17.random函数(随机数)

生成一个随机数,可以有一个数字类型的参数或表达式,如果有参数,那么以这个参数作为生成随机数字的种子,如果没有则生成一个0~1之间的随机数。

示例说明
random()生成一个0~1之间的随机数
random(10)生成一个1~10之间的随机数
random(C1)相对当前单元格,取到C1单元格的值,如果取到的C1单元格有多个,则取第一个,再将这个值作为种子生成一个随机数

18.round函数(四舍五入)

对一个小数进行四舍五入,它需要两个参数,第一个参数要进行四舍五入的小数或表达式,第二个为一个可选的要保留的小数位数,如果没有,则不保留小数。

示例说明
round(32.12)计算后的值为32
round(32.123,2)计算后的值为32.12
round(C1,2)相对当前单元格,取到C1单元格的值,如果取到的C1单元格有多个,则取第一个,然后对这个值做保留两位小数的四舍五入操作

19.sqrt函数(平方根)

求一个数字或表达式计算后值的平方根,参数值计算后数据类型必须是数字,否则会报错。

示例说明
sqrt(2)计算后的值为:1.414214
sqrt(C1)相对当前单元格,取到C1单元格的值,如果取到的C1单元格有多个,则取第一个,然后对这个值进行取平方根计算

日期函数

1.date函数(日期)

输出日期,date函数可以有一个参数,就是日期格式,如果没有则采用yyyy-MM-dd HH:mm:ss格式输出日期。

示例说明
date()以yyyy-MM-dd HH:mm:ss格式输出当前日期,如:2010-08-15 08:45:10
date('yyyy年MM月dd日')以yyyy年MM月dd日格式输出当前日期,如:2010年08月15日

2.day函数(天)

输出当前在月份中的天,该函数没有参数。

示例说明
day()可能输出15,表示当前为15日

3.month函数(月)

输出当前月份,该函数没有参数。

示例说明
month可能输出8,表示当前为8月份

4.week函数(星期)

输出当前是星期几,该函数没有参数。

示例说明
week()输出值可能是“星期三”,表示当前为星期三

5.year函数(年)

输出当前年份,该函数没有参数

示例说明
year输出结果为2010,表示当前为2010年

字符串函数

1.indexOf函数(位置)

用于返回一个字符串,在目标字符串中的位置,该函数至少需要两个参数,第一个为目标字符串,第二个为要查找的字符串,如果有三个参数,那么第三个就是开始查找的位置信息,第三个参数必须是一定大于等于0的数字。

示例说明
indexof('中华人民共和国','共和')表示要从"中华人民共和国"这个字符串中找到“共和”字符串的位置
indexof('中华人民共和国','共和',2)表示要从"中华人民共和国"这个字符串中第二个字符开始始,找到“共和”字符串的位置
indexof(C1,"人民",2)相对于当前单元格,找到C1单元格,如果C1单元格有多个,则取第一个单元格值,再从这个值中第2个位置开始找到“人民”字符串的位置

2.length函数(长度)

求目标字符串长度,该函数必须要有一个参数。

示例说明
length("中华人民共和国")计算结果为7
length(C1)相对于当前单元格,找到C1单元格,如果C1单元格有多个,则取第一个单元格值,然后计算这个值长度

3.lower函数(转小写)

将参数中英文全部转为小写,该函数必须要有一个参数。

示例说明
lower("Super man")计算后的结果为:super man
lower(C1)相对于当前单元格,找到C1单元格,如果C1单元格有多个,则取第一个单元格值,然后将这个值中所有英文转换成小写

4.upper函数(转大写)

将参数中英文全部转为大写,该函数必须要有一个参数。

示例说明
upper("Super man")计算后的结果为:SUPER MAN
upper(C1)相对于当前单元格,找到C1单元格,如果C1单元格有多个,则取第一个单元格值,然后将这个值中所有英文转换成大写

5.replace函数(替换字符串)

这个函数需要有三个参数,第一个是目标字符串,第二个是要被替换的字符串,第三个是要替换的字符串。

示例说明
replace("他是一个好人","他","她")计算结果为:她是一个好人
replace(C1,"他","她")相对于当前单元格,找到C1单元格,如果C1单元格有多个,则取第一个单元格值,然后再将这个值中所有“他”换成“她”

6.substring函数(子字符串)

该函数允许有三个参数,第一个是目标字符串,第二个为开始截取的位置,第三个为截取结束的位置。

示例说明
substring("他是一个好人",2)运行结果为:一个好人
substring("他是一个好人",2,4)运行结果为:一个
substring(C1,2,10)相对于当前单元格,找到C1单元格,如果C1单元格有多个,则取第一个单元格值,然后再取这个值中第2到第10个字符之间内容

7.trim函数(去空格)

去除目标字符串两边空格,该函数要求必须要有一个参数。

示例说明
trim(" 一个好人 ")运行结果为: 一个好人
trim(C1)相对于当前单元格,找到C1单元格,如果C1单元格有多个,则取第一个单元格值,然后再将这个值两边可能存在的空格全部去除

8.json函数(解析JSON字符串)

json函数是2.1.3版本新增的,该函数可以解析指定的目标JSON字符串,并取出指定的属性值。json函数需要有两个参数,第一个是目标JSON字符串对象,第二个是要取出的属性名。

示例说明
json(emp.select(other),'name')取出数据集emp中other属性值对应的字符串,将其转换为JSON,再从这个JSON中取name属性值。
json(emp.select(other),'company.name')取出数据集emp中other属性值对应的字符串,将其转换为JSON,再从这个JSON中取company子对象下的name属性值。

对JSON字符串的要求

json函数在解析JSON字符串时,要求必须是标准的JSON字符串,比如下面这样的:

{"name":"superman","age":32,"company":{"name":"bstek","address":"SHANGHAI CHINA"}}

也就是key属性也需要用“”包裹的,如果是下面这种类型的JSON字符串就解析时就会产生错误:

{name:"superman",age:32,company:{name:"bstek",address:"SHANGHAI CHINA"}}

快速使用

以sum()函数为例

1.单元格类型选择表达式,在最下面表达式书写区填写函数,如下:

2.上父格选择,如下:

3.预览效果,如下: