在这里插入图片描述

导航:LuckReport专栏

本文转载自 W3Cschool,原文链接:ureport2函数,版权归原平台所有,仅用于技术交流学习,禁止商用。

一、快速了解

项目简介

Luck-Report 是一款基于开源项目 UReport2 重构的 Java 高性能报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。相较于 UReport2,Luck-Report 在技术架构上进行了全新升级,后端基于 SpringBoot 框架开发、前端采用 Vue 框架构建,技术选型贴合当下主流项目开发标准,可精准适配各类实际开发需求。

Luck-Report 提供了全新的基于网页的报表设计器,可以在 Chrome、Firefox、Edge 等各种主流浏览器运行(IE 浏览器除外)。使用 Luck-Report,打开浏览器即可完成各种复杂报表的设计制作。

Luck-Report 基于 Apache-2.0 开源协议开源

在线体验

二、函数

在前一小节中,我们介绍了表达式,实际上函数也是表达式的一种。在 Luck-Report 当中提供了大量的内置函数,通过这些内置函数,可以实现各种各样的报表计算功能。函数语法格式如下:

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

常用函数

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 单元格值以集合形式返回

param 函数(取参数)

param 函数用来获取外部传入的参数,它需要一个参数,用于指定要获取的参数名称。

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

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

emptyparam 函数用于判断指定的外部参数是否为 null 或空字符串,如果是返回 true,否则返回 false,该函数为 2.2.3 版本新增,如果要使用该函数,请注意您当前使用的 ureport 版本。

emptyparam 函数一般用于 SQL 数据集 SQL 表达式里,比如下面的写法:

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

formatdate 函数(格式化日期)

对给定的日期参数进行格式化,它至少需要一个参数,第一个参数是要格式化的日期类型的对象,第二个参数是可选的,用于定义格式化采用的模式,如不指定则用默认的:yyyy-MM-dd HH:mm:ss 来进行格式化。

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

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() 输出当前所在页的页码

pages 函数

输出当前报表一共有多少页,该函数没有参数。

示例 说明
pages() 输出当前报表一共有多少页
pages 函数的使用范围 pages 函数目前仅能在页眉页脚中使用

数学函数

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 单元格的值,如果有多个则取第一个值,再转化成中文
chn 函数使用注意事项 chn 函数转换数字即可是整数,也可是小数,如果是小数支持后面最多两位小数,如果实际小数过多,chn 函数会先进行四舍五入,然后再进行转换。

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

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

示例 说明
rmb(213) 计算后的值为:贰佰壹拾叁元整
rmb(200.12) 计算后的值为:贰佰元壹角贰分
rmb(C1) 相对当前单元格,取到 C1 单元格的值,如果有多个则取第一个值,再转化成中文大写的人民币金额
rmb 函数使用注意事项 rmb 函数转换数字即可是整数,也可是小数,如果是小数支持后面最多两位小数,如果实际小数过多,rmb 函数会先进行四舍五入,然后再进行转换。

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 单元格有多个,则取第一个单元格值,然后再将这个值两边可能存在的空格全部去除

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”}}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐