表达式概述
报表表达式的用途与使用位置:单元格公式、计算表达式、条件渲染、参数默认值、报表变量、数据集计算字段,以及表达式编辑器的操作方法。
概述
表达式用来在报表里动态计算值:合计一列数据、拼接一句话、按数值大小改变颜色、给查询参数设置默认日期等。同一套语法和函数用于下列所有位置,只是可用的变量和限制不同。
| 使用位置 | 入口 | 作用 | 可用内容 |
|---|---|---|---|
| 公式单元格 | 设计器「插入」>「公式」,单元格「数据」标签页「内容公式」 | 单元格显示表达式的结果 | 完整语法、全部函数、单元格引用、参数 |
| 数据绑定单元格的计算表达式 | 单元格「数据」标签页「数据字段」>「计算表达式」 | 对每条记录先计算再显示 | $$record.字段、参数、函数 |
| 分组公式 | 数据绑定单元格选择「公式分组」 | 按表达式结果对记录分组 | 同上 |
| 条件渲染 | 单元格「渲染」标签页「条件渲染」 | 满足条件时改变样式、值、行高等 | 公式条件、新值公式,见 条件渲染 |
| 参数默认值 | 「查询参数设置」,默认值模式选「表达式」 | 生成参数默认值 | 见 报表参数 |
| 报表变量 | 报表设置「报表变量」 | 定义可复用的报表级计算值 | $$reportVars,见 脚本使用指南 |
| 数据集计算字段 | 数据集编辑页「计算字段」 | 在数据集里追加派生列 | 受限语法,见 脚本使用指南 |
| 数据集后处理脚本 | 数据集编辑页「后处理脚本」 | 取数后加工记录 | $$data,见 后处理脚本与计算字段 |
SQL 中的 ${} |
数据集 SQL | 把表达式的值作为绑定参数 | 见 SQL 参数与动态语法 |
表达式编辑器
需要写较长的公式时,用「表达式编辑」对话框:
- 选中单元格,在设计器菜单选「插入」>「公式」,或在「数据」标签页的「内容公式」处点「编辑」。
- 在编辑区输入表达式。
- 右侧「函数」标签页列出内置函数,搜索后点击插入;「代码片段」标签页提供成段的写法。
- 需要参考现成例子时,点「常用写法」。
- 点确定回到设计器,预览查看结果。
编辑器里函数提示的文字是简写,参数是否可省略以 内置函数总览 和各函数文章为准。
快速上手
以下例子都可以在公式单元格里直接输入。
引用单元格做计算:B2 * 1.1,B2 的值乘以 1.1。
汇总一列:合计格写 sum(B2),B2 是向下扩展的数据格。
占比:B2 / sum(B2[!0]),本行值除以整列合计。
拼接文字:'合计 ' + sum(B2) + ' 元'。
为空显示横杠:ifEmpty(B2, '-')。
带参数的标题:文本输入 就诊日期从$startDate至$endDate。
条件取值:B2 >= 60 ? '及格' : '不及格'。
当前日期:date() 得 yyyy-MM-dd 文本。
常见错误
| 现象 | 原因 | 处理 |
|---|---|---|
| 「找不到函数」 | 参数个数不对,或参数类型不符(如给 substring 传了 BigDecimal 的位置) |
补全参数;用 ::int、::string 转换,见 内置函数总览 |
| 结果为空 | 文本参与减、乘、除但不是数字;参数名拼错(未定义参数得 null) |
检查参数名;用 ifNull 兜底 |
| 条件总不成立 | 写成了 =(赋值)而不是 == |
改用 == |
用了 a ?: b |
不支持这种空值合并写法 | 写 ifNull(a, b) |
| 数字被当作文本连接 | + 的一侧是文本字面量 |
见 报表基本语法 的「加号」 |
page() 恒为 1 |
网格预览在分页前计算 | 用分页导出(PDF)查看真实页码 |