参数类型、默认值与传参
说明报表参数的定义方式、六种参数类型、默认值模式、参数值的各种来源与合并规则,以及集合参数的写法和在 SQL 中的展开行为。
概述
报表参数是报表运行时的输入变量。参数独立于查询表单存在:查询表单只是其中一种输入方式,没有绑定控件的参数照样可以被 SQL、表达式和数据集过滤条件引用。运行时,服务端把各来源传入的参数值与报表里定义的参数逐个合并,得到最终生效的参数值。
本文说明参数的定义、类型、默认值和来源。参数在 SQL 与表达式里的引用写法,见 SQL 参数与动态语法 与 数据集。
功能入口
设计器顶栏左侧「查询参数设置」,打开「报表参数配置」对话框。对话框顶部有「添加参数」按钮和「共 N 个参数」计数,参数以表格形式编辑。
操作步骤
- 点击「添加参数」新增一行。
- 在「参数名称」列填写名称。名称不能为空,也不能与其他参数重名。
- 在「参数类型」列选择类型;类型为「集合」时,同一格内多出一个元素类型下拉。
- 在「默认值模式」列选择默认值的给法,在「默认值」列填写默认值。
- 在「备注说明」列填写说明,点「确定」保存。
属性说明
参数类型
| 界面名称 | 类型 | 说明 | 传值示例 |
|---|---|---|---|
| 字符串 | String |
文本 | "技术部" |
| 数值 | Number |
数字,内部按十进制数处理 | 100 |
| 布尔值 | Boolean |
真假 | true |
| 日期 | Date |
日期 | "2026-07-01" |
| 日期时间 | DateTime |
日期加时间 | "2026-07-01 08:30:00" |
| 集合 | List |
一组值,用于多选和 IN 条件 |
["内科","外科"] |
日期与日期时间参数接收字符串,系统自动识别常见日期格式,无法识别时得到空值。建议按 yyyy-MM-dd、yyyy-MM-dd HH:mm:ss 传值。
元素类型
类型为「集合」时可设置元素类型:
| 取值 | 含义 |
|---|---|
| 文本元素 | 每个元素按文本绑定,默认值 |
| 数值元素 | 每个元素转为数值;有元素无法转为数值时,出数会报错并指出是第几项,而不是静默查不到数据 |
编码类的值(如 001)应使用文本元素,数值元素会把 001 变成 1。
默认值模式
| 模式 | 说明 | 适用类型 |
|---|---|---|
| 固定值 | 直接填写默认值 | 全部 |
| 表达式 | 默认值由表达式在每次出数时计算,如 monthStart(now(), 'yyyy-MM-dd')(本月第一天)、userAccount()(当前用户账号) |
全部 |
| 日期预设 | 从预设列表选择 | 仅日期、日期时间 |
日期预设列表:
| 预设 | 含义 | 备注 |
|---|---|---|
| 当天 | 当天 0 点 | |
| 当天开始、当天结束 | 当天 0 点、当天 23:59:59 | 仅日期时间 |
| 当前时间 | 出数时的时刻 | 仅日期时间 |
| 本月月初、本月月末 | 当月第一天、最后一天 | |
| 上个月初、上个月末 | 上月第一天、最后一天 | |
| 本季度初、本季度末 | 当前季度第一天、最后一天 | |
| 上季度初、上季度末 | 上一季度第一天、最后一天 | |
| 本年年初、本年年末 | 当年 1 月 1 日、12 月 31 日 | |
| 上年年初、上年年末 | 上年 1 月 1 日、12 月 31 日 |
参数值的来源与合并
| 来源 | 说明 |
|---|---|
| 查询表单 | 使用者在控件里填写,点击「查询」时提交 |
| URL 参数 | 地址栏的 parameters,只在首次取数时使用,见 报表预览 |
| 预览「参数调试」抽屉 | 设计器预览时为任意参数临时赋值,见 报表预览 |
| 单元格链接 | 「报表链接」「更改查询参数」传入的参数,见 单元格链接与钻取 |
| 宿主页面 | 报表被嵌入第三方页面时,宿主通过消息通道调用 setParameters,见 报表集成 |
服务端按报表里定义的参数逐个合并:
- 传入了该参数的值(值不为 null):使用传入值;
- 没传值:使用默认值(固定值、表达式或日期预设的计算结果);
- 传入值按参数类型转换。
由此得到两条规则:
- 报表里没有定义的参数名,即使传入也会被丢弃,不报错、无日志。参数名必须与「报表参数配置」里的「参数名称」完全一致。
- 「重置」按钮清空的控件没有传值,服务端按默认值补齐;数组值以空数组提交,不回到默认值。
集合参数
集合参数用于「多选」「IN 条件」。
输入写法
在「默认值」、预览「参数调试」抽屉等文本输入处,集合参数按以下规则解析:
- 用半角逗号
,、全角逗号,或顿号、分隔,逐项去除首尾空白并忽略空项,1,2、3得到三项; - 也可以写 JSON 数组,如
["A","B"]; - 空文本得到空集合。
多选下拉绑定集合参数时提交数组;绑定字符串参数时提交逗号分隔的字符串。
在 SQL 中使用
SELECT * FROM demo_客户
WHERE 所在大区 IN (${$regions})
IN 里只写一个集合参数占位符,运行时按元素个数展开为对应个数的占位符:
| 集合内容 | 效果 |
|---|---|
| 1 个元素 | 一个占位符 |
| 多个元素 | 展开为等量的占位符 |
| 空集合 | 替换为 NULL,IN (NULL) 不匹配任何行,不报错 |
字符串常量里的 ? 不算占位符。存储过程不做展开,多值集合传给存储过程会明确报错。
示例
为客户明细报表增加「多选大区」条件,并设置一个动态日期默认值。
- 「报表参数配置」中添加参数:
regions,类型「集合」,元素类型「文本元素」,默认值填华东,华北(全角逗号也可以);asOf,类型「日期」,默认值模式「日期预设」,选「本月月初」。 - 数据集 SQL:
SELECT 客户名称, 所在大区, 注册日期
FROM demo_客户
WHERE 所在大区 IN (${$regions})
AND 注册日期 >= ${$asOf}
- 「查询表单设计」中添加「多选下拉」绑定
regions,选项类型「直连SQL字典」,SQL 为SELECT DISTINCT 大区 AS label, 大区 AS value FROM demo_地区;添加「日期框」绑定asOf;添加「查询按钮」。 - 预览:首次打开按默认值
华东、华北和本月月初出数;取消一个大区再点「查询」,IN条件随之减少一项。 - 点「重置」并查询:
asOf按预设日期补齐,regions以空集合提交,结果为空。
注意事项
注意:
${$参数名}与裸写的$参数名在数据集 SQL 中都表示参数引用,值以预编译占位符绑定,不会拼入 SQL 文本。${参数名}(没有内层$)是未定义的变量,会求值为空。
注意:控件绑定的参数类型必须兼容,见 查询表单控件。
提示:日期预设只对日期、日期时间类型有效;其他类型选择表达式模式,用表达式函数计算默认值。