Skip to content

函数

函数是表达式的一种,调用格式为 函数名(参数, 参数, ...),参数可以是常量、单元格引用或嵌套表达式,返回值可继续参与运算。Luck-Report 内置函数按用途分为五类,下面逐一说明。

常用函数

count(计数)

统计满足条件的单元格数量,多个参数的数量相加。

示例说明
count(C1)统计 C1 单元格数量
count(C1,C2)统计 C1 与 C2 单元格总数
count(C1{age>20})只统计 age>20 的 C1 单元格数量
count(C1{age>20},C2{salary>2000 and degree=='本科'})每个参数可独立设置筛选条件

sum(求和)

对全部参数值累加,要求均为数字,否则报错。

示例说明
sum(C1)所有 C1 值求和
sum(C1,C2)C1、C2 的值一起求和
sum(C1{age>20})age>20 的 C1 值求和
sum(C1{age>20},C2{salary>2000 and degree=='本科'})两个参数分别按各自条件筛选后求和

avg(平均值)

对全部参数值求平均,要求均为数字,否则报错。用法与 sum 相同。

示例说明
avg(C1)所有 C1 值的平均值
avg(C1{age>20},C2{salary>2000 and degree=='本科'})按条件筛选后求平均

max(最大值)

在全部参数值中取最大值,要求均为数字,否则报错。用法与 sum 相同。

示例说明
max(C1)所有 C1 值中的最大值
max(C1{age>20},C2)age>20 的 C1 值与全部 C2 值中的最大值

min(最小值)

在全部参数值中取最小值,要求均为数字,否则报错。用法与 sum 相同。

示例说明
min(C1)所有 C1 值中的最小值
min(C1{age>20},C2)age>20 的 C1 值与全部 C2 值中的最小值

row(行号)

返回当前单元格所在行的编号,无参数。

示例说明
row()当前行号

column(列号)

返回当前单元格所在列的编号,无参数。

示例说明
column()当前列号

dataRow(数据行序号)

返回当前单元格所在数据行的序号(从 1 开始),基于左侧父单元格自动计算,常用于动态生成序号列,无参数。

示例说明
dataRow()当前数据行序号,如 1、2、3

order(排序)

对第一个参数取到的值排序后以集合返回。第二个参数为排序方向:true 正序、false 倒序。

示例说明
order(C1,false)所有 C1 值倒序排列
order(C1{age>18},true)age>18 的 C1 值正序排列

list(取集合)

将各参数取到的值收集为一个集合返回。

示例说明
list(C1)所有 C1 值组成集合
list(C1,C2{age>20})全部 C1 值加上 age>20 的 C2 值组成集合

param(取参数)

获取外部传入的参数,参数为参数名;也可传单元格引用,以其值作为参数名。

示例说明
param("deptId")取名为 deptId 的外部参数
param(C1)以第一个 C1 单元格的值作为参数名取参

emptyparam(参数判空)

判断外部参数是否为 null 或空字符串,是则返回 true,否则返回 false。常用于 SQL 数据集中动态拼接查询条件:

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

若用 param 实现同样效果,需要同时判断 null 与空串:param("name")!=null && param("name")!="",emptyparam 一步到位。

formatdate(格式化日期)

将日期值按指定模式格式化为字符串,默认模式 yyyy-MM-dd HH:mm:ss。第一个参数必须是日期类型,否则报错。

示例说明
formatdate(C1)C1 值按默认模式输出
formatdate(C1,"yyyyMMdd")C1 值按 yyyyMMdd 输出

formatnumber(格式化数字)

将数字按指定模式格式化为字符串,默认模式 #。参数值须可转换为数字,否则报错。

示例说明
formatnumber(C1)C1 值按 # 格式化
formatnumber(C1,"#,###.00")C1 值按千分位加两位小数输出,如 12,345.00

get(按位置取值)

从集合中取指定位置的对象,可进一步取其属性。第一个参数为目标集合(必填),第二个为位置(从 1 开始,省略取第 1 个,越界取最后一个),第三个为属性名(可选)。

示例说明
get(ds1.select(employee_name))取 ds1 数据集的第 1 个值
get(ds1.select(employee_name),2)取第 2 个值
get(ds1.select(employee_name),2,"deptId")取第 2 个对象的 deptId 属性值
get(A3,4)取所有 A3 单元格值中的第 4 个

分页函数

分页函数的计算范围限定在当前页,通常放在行类型为"重复表头"或"重复表尾"的行中,且仅在分页预览时生效。

pcount(当前页计数)

统计当前页中满足条件的单元格数量,用法与 count 相同,只是范围限定在当前页。

示例说明
pcount(C1)当前页 C1 单元格数量
pcount(C1,D2{D2>10000})当前页 C1 数量加值大于 10000 的 D2 数量

psum(当前页求和)

对当前页中全部参数值累加,用法与 sum 相同。

示例说明
psum(C1)当前页所有 C1 值求和
psum(C1,D2{D2<10000})当前页全部 C1 值加上值小于 10000 的 D2 值

pavg(当前页平均值)

对当前页中全部参数值求平均,用法与 avg 相同。

示例说明
pavg(C1)当前页所有 C1 值的平均值
pavg(C1,D2{D2<10000})当前页全部 C1 值与值小于 10000 的 D2 值求平均

pmax(当前页最大值)

取当前页中全部参数值的最大值,用法与 max 相同。

示例说明
pmax(C1)当前页所有 C1 值中的最大值
pmax(C1,D2,E2{E2>1000})当前页 C1、D2 及值大于 1000 的 E2 中的最大值

pmin(当前页最小值)

取当前页中全部参数值的最小值,用法与 min 相同。

示例说明
pmin(C1)当前页所有 C1 值中的最小值
pmin(C1,D2,E2{E2>1000})当前页 C1、D2 及值大于 1000 的 E2 中的最小值

prows(当前页行数)

返回当前页包含的数据行数,无参数。

示例说明
prows()当前页数据行数

page(页码)

返回当前所在页的页码,无参数。可在页眉页脚中使用,也可在表格单元格中使用(分页时按当前单元格所在行的页码取值)。仅在分页预览时生效。

示例说明
page()当前页码

pages(总页数)

返回报表总页数,无参数,仅可在页眉页脚中使用

示例说明
pages()总页数

数学函数

以下函数的参数均须为数字或可转换为数字的值,否则报错;引用单元格时只取第一个值(median/mode/vara/stdevp 除外,它们取全部值)。三角函数按弧度计算。

abs(绝对值)

示例说明
abs(-233)结果为 233
abs(C1)取第一个 C1 值的绝对值

ceil(向上取整)

进位到不小于参数的最小整数。

示例说明
ceil(32.32)结果为 33
ceil(C1)取第一个 C1 值向上取整

floor(向下取整)

舍弃小数部分,取不大于参数的最大整数。

示例说明
floor(32.52)结果为 32
floor(C1)取第一个 C1 值向下取整

round(四舍五入)

第二个参数为保留的小数位数,省略则取整。

示例说明
round(32.12)结果为 32
round(32.123,2)结果为 32.12
round(C1,2)第一个 C1 值保留两位小数

sqrt(平方根)

求参数的平方根。

示例说明
sqrt(2)结果为 1.414214
sqrt(C1)取第一个 C1 值的平方根

pow(幂)

求第一个参数的第二个参数次方,需要两个参数。

示例说明
pow(3,2)3 的 2 次方,结果为 9
pow(C1,3)取第一个 C1 值的 3 次方

exp(e 的幂)

求自然常数 e 的参数次方。

示例说明
exp(213)e 的 213 次方,结果为 3.196867565323994E92
exp(C1)取第一个 C1 值作为 e 的指数

log(自然对数)

求参数以 e 为底的对数值。

示例说明
log(213)结果为 5.3612921657094255
log(C1)取第一个 C1 值的自然对数

log10(常用对数)

求参数以 10 为底的对数值。

示例说明
log10(213)结果为 2.3283796034387376
log10(C1)取第一个 C1 值的常用对数

sin(正弦)

求参数的正弦值,按弧度计算。

示例说明
sin(213)结果为 -0.58777
sin(C1)取第一个 C1 值的正弦值

cos(余弦)

求参数的余弦值,按弧度计算。

示例说明
cos(213)结果为 0.8090276252864301
cos(C1)取第一个 C1 值的余弦值

tan(正切)

求参数的正切值,按弧度计算。

示例说明
tan(213)结果为 -0.72651
tan(C1)取第一个 C1 值的正切值

median(中位数)

求一组数据的中位数,取全部值参与计算。

示例说明
median(12,42,31)结果为 31
median(C1,C2)C1、C2 全部值的中位数

mode(众数)

求一组数据中出现次数最多的值,取全部值参与计算。

示例说明
mode(12,42,3,12)12 出现两次,结果为 12
mode(C1)所有 C1 值的众数

vara(方差)

求总体方差(离差平方和除以 n),取全部值参与计算。

示例说明
vara(12,42,3,12)结果为 217.6875
vara(C1)所有 C1 值的方差

stdevp(标准差)

求总体标准差(总体方差开平方),取全部值参与计算。

示例说明
stdevp(12,42,3,12)结果为 14.75424
stdevp(C1)所有 C1 值的标准差

chn(数字转中文)

将数字转为中文大写。最多保留两位小数,超出部分先四舍五入。

示例说明
chn(213)贰佰壹拾叁
chn(C1)取第一个 C1 值转为中文

rmb(人民币大写)

将数字转为人民币大写金额。最多保留两位小数,超出部分先四舍五入。

示例说明
rmb(213)贰佰壹拾叁元整
rmb(200.12)贰佰元壹角贰分

random(随机数)

无参数时返回 0~1 的随机小数;带参数时以参数为上界,返回大于等于 0 且小于上界的随机整数。

示例说明
random()0~1 的随机小数
random(10)0~9 的随机整数

日期函数

date(日期输出)

无参数时按 yyyy-MM-dd HH:mm:ss 输出当前日期;一个参数时该参数为格式模式;两个参数时第一个为日期值、第二个为格式模式。

示例说明
date()输出如 2010-08-15 08:45:10
date('yyyy年MM月dd日')输出如 2010年08月15日
date(C1,'yyyy年MM月dd日')将 C1 的日期值按指定格式输出

day(天)

输出当前日期在月份中的天,无参数。

示例说明
day()几号,如 15

month(月)

输出当前月份,无参数。

示例说明
month()月份,如 8

week(星期)

输出当前是星期几,无参数。

示例说明
week()星期几,如 "星期三"

year(年)

输出当前年份,无参数。

示例说明
year()年份,如 2010

字符串函数

以下函数的第一个参数为目标字符串,引用单元格时只取第一个值;字符串位置均从 0 开始计数。

indexof(查找位置)

返回查找串在目标串中的位置,未找到返回 -1。第三个参数可选,指定从哪个位置开始查找。

示例说明
indexof('中华人民共和国','共和')结果为 4
indexof('中华人民共和国','共和',2)从位置 2 起查找,结果为 4
indexof(C1,"人民",2)从第一个 C1 值的位置 2 起查找

length(长度)

示例说明
length("中华人民共和国")结果为 7
length(C1)第一个 C1 值的长度

lower(转小写)

将参数中的英文全部转为小写。

示例说明
lower("Super man")结果为 super man
lower(C1)取第一个 C1 值转为小写

upper(转大写)

将参数中的英文全部转为大写。

示例说明
upper("Super man")结果为 SUPER MAN
upper(C1)取第一个 C1 值转为大写

replace(替换)

将目标串中所有匹配的子串全部替换。

示例说明
replace("他是一个好人","他","她")结果为 她是一个好人
replace(C1,"他","她")替换第一个 C1 值中所有的 "他"

substring(截取子串)

第二个参数为起始位置,第三个参数可选,为结束位置(不含)。

示例说明
substring("他是一个好人",2)从位置 2 截到末尾,结果为 一个好人
substring("他是一个好人",2,4)截取位置 2 到 4,结果为 一个
substring(C1,2,10)截取第一个 C1 值的位置 2 到 10

trim(去首尾空格)

示例说明
trim(" 一个好人 ")结果为 一个好人
trim(C1)去除第一个 C1 值两边的空格

json(解析 JSON)

第一个参数为 JSON 字符串,第二个参数为要取的属性名,支持 a.b 点路径访问子对象。要求标准 JSON(key 必须用双引号包裹),否则解析报错。

示例说明
json(emp.select(other),'name')取 other 属性转 JSON 后的 name 值
json(emp.select(other),'company.name')取 company 子对象下的 name 值

Luck-Report 报表引擎