函数

2021-10-10 Guide
  • 开发人员
  • 报表
About 57 min

在前一小节中,我们介绍了表达式,表达式中会用到函数。原UReport2中提供了大量的内置函数,通过这些内置函数,可以实现各种各样的报表计算功能。函数语法格式如下:

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

下面我们就来逐个介绍UReport2内置的函数。

# 常用函数

# count函数(统计数量)

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单元格数量

# sum函数(累加)

sum函数是对给定的表达式在计算后值进行累加,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单元格的值进行累加

# avg函数(求平均值)

avg函数是对给定的表达式在计算后值求平均值,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单元格的值进行求平均值

# max函数(求最大值)

max函数是对给定的表达式在计算后值求其中的最大值,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单元格的值进行求最大值

# min函数(求最小值)

min函数是对给定的表达式在计算后值求其中的最小值,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单元格的值进行求最小值

# row函数(取行号)

取当前单元格所在行的行号,这个函数比较简单,它没有参数。

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

# column函数(取列号)

取当前单元格所在列的列号,这个函数比较简单,它没有参数。

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

# order函数(排序)

order函数需要两个参数,第一个为要进行排序的对象表达式,第二个是一个布尔值,用来设置排序方式,true正序,false为倒序。

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

# list函数(罗列数据)

取到表达式中定义所有数据,并以集合形式返回。

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

# formatnumber函数(格式化数字)

对给定的参数进行格式化,它至少需要一个参数,第一个参数是要格式化的数字对象,要保证这个参数值取到后可以转换成日期,否则将发生错误; 第二个参数是可选的,用于定义数字格式化采用的模式,如不定义,则采用默认的#来进行格式化。

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

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

get函数是2.1.2版本中新增的,它的作用是获取数据集中指定位置的对象或对象的某个属性值。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单元格值,从中取第四个值并返回。

# 分页相关函数

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

分页相关函数使用

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

# pcount函数

统计当前页下表达对应值的数目,与count函数的使用方法基本一致,不同之处在于pcount只会统计当前页中对应的表达式内容的数目。

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

# psum函数

将当前页下表达式对应的所有值进行累加,与sum函数对应,不同的是psum只针对当前页。

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

# pmax函数

比较当前页中,表达式对应的值,找出其中最大的那个值,与max函数对应,只是pmax只针对当前页。

示例 说明
pmax(C1) 比较当前页中所有C1单元格值,找出最大值。
pmax(C1,D2,E2{E2>1000}) 比较当前页中,所有C1、D2以及值大于1000的E2单元格值,找出其中最大的。

# pmin函数

比较当前页中,表达式对应的值,找出其中最小的那个值,与min函数对应,只是pmin只针对当前页。

示例 说明
pmin(C1) 比较当前页中所有C1单元格值,找出最小值。
pmin(C1,D2,E2{E2>1000}) 比较当前页中,所有C1、D2以及值大于1000的E2单元格值,找出其中最小的。

# page函数

输出当前所在页的页码,该函数没有参数。

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

# 数学函数

# abs函数(绝对值)

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

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

# ceil函数(最小值)

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

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

# floor函数(最大值)

      对参数值取最大值,如果参数值为小数将四舍五入小数点后面的小数部分,参数值计算后数据类型必须是数字,否则会报错。
示例 说明
floor(32.52) 计算后值为33
floor(C1) 相对当前单元格,取到C1单元格的值,如果有多个则取第一个值返回其最大

# chn函数(数字转中文)

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

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

Note

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

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

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

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

# cos函数(求余弦)

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

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

# sin函数(正弦)

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

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

# tan函数(正切)

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

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

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

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

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

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

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

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

# log函数(自然对数)

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

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

# median函数(中位数)

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

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

# mode函数(众数)

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

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

# vara函数(方差)

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

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

# stdevp函数(标准差)

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

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

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

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

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

# random函数(随机数)

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

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

# round函数(四舍五入)

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

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

# sqrt函数(平方根)

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

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

# 日期函数

# 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日

# day函数(天)

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

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

# month函数(月)

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

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

# week函数(星期)

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

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

# year函数(年)

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

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

# 字符串函数

# indexOf函数(位置)

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

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

# length函数(长度)

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

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

# lower函数(转小写)

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

# upper函数(转大写)

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

# replace函数(替换字符串)

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

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

# substring函数(子字符串)

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

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

# trim函数(去空格)

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

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