在 VeryReport 复杂报表设计器 中,参数联动指参数面板中多个下拉框按层级依次过滤选项:选择「区域」后,「省份」下拉仅展示该区域下的省份;修改上级选项时,下级选项自动刷新并清空已选值。本文介绍联动原理、配置步骤,并以「区域 → 省份 → 销售明细」为例完成完整演练。
相关文档:参数报表 · 参数报表快速入门 · 帮助文档首页 · 产品介绍:复杂报表
1. 概述
1.1 适用版本
报表设计器版本 |
|---|
since 3.0 |
1.2 应用场景
当查询条件存在层级从属关系时,适合使用参数联动,例如:
区域 → 省份:先选华东,再选江苏 / 浙江 / 上海;
事业部 → 产品线:先选事业群,再选其下属产品线;
仓库 → 库区 → 货位:仓储类报表的多级筛选。
联动只影响下级控件的选项列表,不会每次改下拉就重算整张报表;用户选好条件后点击「查询」,主数据集才按当前参数 Map 取数。
1.3 功能简介
VeryReport 参数联动:无需单独配置「联动关系表」,也无需公式型字典。只需满足:
下级控件的数据字典类型为数据集;
该字典数据集的 SQL 中写入上级占位符,如
WHERE area_code = '${area}';参数面板控件分别绑定同名参数
area、province等。
引擎会自动解析 SQL 中的 ${},建立「上级参数 → 下级控件」依赖;预览时上级 change 触发联动接口,刷新下级 options 并清空下级值。
自定义字典、数据库表字典提供固定选项,不参与联动刷新。若需级联,请统一使用「数据集」型数据字典。
2. 联动原理
2.1 依赖如何建立
读取下级控件字典数据集的 SQL,解析其中的
${参数名}列表;若参数面板上存在绑定该参数名的控件,则建立依赖边;
用户修改上级控件 → 按拓扑序刷新所有依赖它的下级控件选项。
2.2 运行时规则
规则 | 说明 |
|---|---|
触发时机 | 上级控件值变更(change)即刷新下级选项 |
下级已选值 | 上级变更后,依赖它的下级清空选中,避免脏值 |
上级为空 | 下级选项为空列表;点查询时空值按参数空值约定参与替换 |
联动方向 | 单向 A → B → C,不支持反向联动 |
适用控件 | 数据字典为 DATASET 的下拉 / 多选 / 单选 / 复选 |
2.3 与「查询」的边界
用户操作 | 系统行为 |
|---|---|
修改区域 / 省份下拉 | 仅刷新下级选项,报表主体不变 |
点击「查询」 | 收集面板参数,重算主数据集,刷新报表内容 |
首屏进入预览 | 按 URL / 默认值灌参后,对有依赖的控件做一轮联动刷新 |
3. 示例
目标:参数面板「区域」「省份」两级联动;点击查询后,报表展示对应省份的 demo_regional_sales 明细。数据集均选择数据源 VRDemo。
4.1 新建字典数据集
打开复杂报表设计器,左侧 数据集 → 模板数据集 → + 新建 → 数据库查询,数据源选 VRDemo。
创建
dict_area(无上级依赖):
SELECT area_code, area_name
FROM demo_param_area
ORDER BY sort_order创建
dict_province(依赖area):
SELECT province_code, province_name
FROM demo_param_province
WHERE area_code = '${area}'保存后分别点击 刷新参数,确认 dict_province 识别出数据集参数 area。
4.2 新建主查询数据集
SELECT s.order_no, s.city_name, s.product_category, s.product_name,
s.sales_amount, s.gross_margin_pct, s.order_date,
a.area_name, p.province_name
FROM demo_regional_sales s
JOIN demo_param_area a ON a.area_code = s.area_code
JOIN demo_param_province p ON p.province_code = s.province_code
WHERE s.area_code = '${area}'
AND s.province_code = '${province}'命名为 ds_sales。刷新参数后应出现 area、province。其中 area_name、province_name 供标题或表头展示中文名称(过滤条件仍用编码参数)。
4.4 设计报表主体
标题行建议写固定文案「区域销售明细」。注意:表达式
$area、$province取的是参数实际值(本示例为EAST、JS等编码),不是下拉框上的「华东」「江苏」;若写成$area + " - " + $province + " 区域销售明细",预览标题会变成「EAST - JS 区域销售明细」,观感不佳。若标题需要展示中文名称:在主数据集 SQL 中
JOIN demo_param_area / demo_param_province取出area_name、province_name,将名称字段拖入标题区单元格(随查询结果展示),不要直接拼参数编码。表头:订单号、城市、品类、产品、签约金额、毛利率、签约日期。
将
ds_sales字段拖入数据行,保持纵向扩展。金额列设置数字格式
#0.00;日期列设置yyyy-MM-dd。若需按品类分组小计,请正确设置左主格 / 上主格(主子格关系),保证扩展后坐标唯一、汇总不错位。
报表设计如下:

数据字典的「实际值」参与 SQL 替换与
$参数名引用;「显示值」仅用于控件界面展示。联动过滤、查询条件请始终以实际值(编码)为准。
4.5 配置参数面板
切换到 参数面板 Tab,拖入两个下拉控件与查询、重置按钮。
下拉一:绑定参数
area;标签「区域」;数据字典 → 数据集 → dict_area,实际值area_code,显示值area_name,设置默认值为常量,「EAST」。下拉二:绑定参数
province;标签「省份」;数据字典 → 数据集 → dict_province,实际值province_code,显示值province_name,设置默认值为常量,「SH」。属性栏只读区可看到「依赖参数:area」——由 SQL 中的
${area}自动解析,无需额外点选联动配置。
参数设计如下:

4.6 效果预览
保存模板,预览 → 分页预览。
首屏默认「华东 / 上海」,省份下拉应仅含江苏、浙江、上海。
将区域改为「华北」→ 省份已选值被清空,选项变为北京、天津、山东。
选择「北京」后点查询 → 报表展示华北-北京 3 条销售明细。
修改省份不点查询时,报表主体应保持不变(仅下拉选项刷新)。
如下图所示:

5. 索引与进阶
序号 | 主题 | 说明 |
|---|---|---|
1 | 字典与主查分离 | 字典数据集专供下拉选项,勿与主查询共用同一带过滤的数据集,避免循环依赖 |
2 | 实际值 / 显示值 | SQL 与 |
3 | 三级联动 | 继续增加「城市」下拉:字典 SQL 写 |
4 | URL 传参 |
|
5 | 主子格 | 扩展汇总场景请配置左主格、上主格,避免联动查询后合计错位 |
6. 常见问题
Q:改了区域,省份选项没变化?
A:确认省份下拉的数据字典类型为数据集,且 SQL 含 ${area};绑定参数名与占位符一致;不要使用「自定义」字典。
Q:标题写成 $area + … 显示成 EAST、JS?
A:正常。$参数名 取的是实际值(编码)。标题请用固定文案,或从主数据集 JOIN 出的 area_name / province_name 字段展示中文。
Q:省份有选项,但查询无数据?
A:检查主数据集 SQL 中 area、province 是否与明细表编码一致(本示例用 EAST/JS 等编码,不是中文名);是否已点击「查询」。
Q:一改下拉整表就刷新?
A:正常联动只刷新选项。若整表刷新,检查是否误绑「改完即查」类自定义脚本;标准产品应仅「查询」按钮触发重算。
Q:首屏省份列表为空?
A:确认区域默认值已灌入;首屏会按默认参数做一轮联动刷新。区域为空时,省份字典因 WHERE area_code = '${area}' 无匹配而为空。
Q:汇总行数字不对?
A:与联动无关,请检查扩展方向、聚合类型及主子格是否指向正确主格。