函数
函数是表达式的一种,调用格式为 函数名(参数, 参数, ...),参数可以是常量、单元格引用或嵌套表达式,返回值可继续参与运算。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 值 |