VeryReport · 帮助文档

参数联动

参数联动入门:区域→省份级联下拉、字典数据集 ${上级参数} 写法、预览刷新规则与查询边界。以 VeryReport 复杂报表设计器为准。

VeryReport 复杂报表设计器 中,参数联动指参数面板中多个下拉框按层级依次过滤选项:选择「区域」后,「省份」下拉仅展示该区域下的省份;修改上级选项时,下级选项自动刷新并清空已选值。本文介绍联动原理、配置步骤,并以「区域 → 省份 → 销售明细」为例完成完整演练。

相关文档:参数报表 · 参数报表快速入门 · 帮助文档首页 · 产品介绍:复杂报表

1. 概述

1.1 适用版本

报表设计器版本

since 3.0

1.2 应用场景

当查询条件存在层级从属关系时,适合使用参数联动,例如:

联动只影响下级控件的选项列表,不会每次改下拉就重算整张报表;用户选好条件后点击「查询」,主数据集才按当前参数 Map 取数。

1.3 功能简介

VeryReport 参数联动:无需单独配置「联动关系表」,也无需公式型字典。只需满足:

引擎会自动解析 SQL 中的 ${},建立「上级参数 → 下级控件」依赖;预览时上级 change 触发联动接口,刷新下级 options 并清空下级值。

自定义字典、数据库表字典提供固定选项,不参与联动刷新。若需级联,请统一使用「数据集」型数据字典。

2. 联动原理

2.1 依赖如何建立

  1. 读取下级控件字典数据集的 SQL,解析其中的 ${参数名} 列表;

  2. 若参数面板上存在绑定该参数名的控件,则建立依赖边;

  3. 用户修改上级控件 → 按拓扑序刷新所有依赖它的下级控件选项。

2.2 运行时规则

规则

说明

触发时机

上级控件值变更(change)即刷新下级选项

下级已选值

上级变更后,依赖它的下级清空选中,避免脏值

上级为空

下级选项为空列表;点查询时空值按参数空值约定参与替换

联动方向

单向 A → B → C,不支持反向联动

适用控件

数据字典为 DATASET 的下拉 / 多选 / 单选 / 复选

2.3 与「查询」的边界

用户操作

系统行为

修改区域 / 省份下拉

仅刷新下级选项,报表主体不变

点击「查询」

收集面板参数,重算主数据集,刷新报表内容

首屏进入预览

按 URL / 默认值灌参后,对有依赖的控件做一轮联动刷新

3. 示例

目标:参数面板「区域」「省份」两级联动;点击查询后,报表展示对应省份的 demo_regional_sales 明细。数据集均选择数据源 VRDemo

4.1 新建字典数据集

  1. 打开复杂报表设计器,左侧 数据集 → 模板数据集 → + 新建 → 数据库查询,数据源选 VRDemo

  2. 创建 dict_area(无上级依赖):

SELECT area_code, area_name
FROM demo_param_area
ORDER BY sort_order
  1. 创建 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。刷新参数后应出现 areaprovince。其中 area_nameprovince_name 供标题或表头展示中文名称(过滤条件仍用编码参数)。

4.4 设计报表主体

  1. 标题行建议写固定文案「区域销售明细」。注意:表达式 $area$province 取的是参数实际值(本示例为 EASTJS 等编码),不是下拉框上的「华东」「江苏」;若写成 $area + " - " + $province + " 区域销售明细",预览标题会变成「EAST - JS 区域销售明细」,观感不佳。

  2. 若标题需要展示中文名称:在主数据集 SQL 中 JOIN demo_param_area / demo_param_province 取出 area_nameprovince_name,将名称字段拖入标题区单元格(随查询结果展示),不要直接拼参数编码。

  3. 表头:订单号、城市、品类、产品、签约金额、毛利率、签约日期。

  4. ds_sales 字段拖入数据行,保持纵向扩展

  5. 金额列设置数字格式 #0.00;日期列设置 yyyy-MM-dd

  6. 若需按品类分组小计,请正确设置左主格 / 上主格(主子格关系),保证扩展后坐标唯一、汇总不错位。

报表设计如下:

数据字典的「实际值」参与 SQL 替换与 $参数名 引用;「显示值」仅用于控件界面展示。联动过滤、查询条件请始终以实际值(编码)为准。

4.5 配置参数面板

  1. 切换到 参数面板 Tab,拖入两个下拉控件与查询重置按钮。

  2. 下拉一:绑定参数 area;标签「区域」;数据字典 → 数据集 → dict_area,实际值 area_code,显示值 area_name,设置默认值为常量,「EAST」

  3. 下拉二:绑定参数 province;标签「省份」;数据字典 → 数据集 → dict_province,实际值 province_code,显示值 province_name,设置默认值为常量,「SH」

  4. 属性栏只读区可看到「依赖参数:area」——由 SQL 中的 ${area} 自动解析,无需额外点选联动配置。

参数设计如下:

4.6 效果预览

  1. 保存模板,预览 → 分页预览

  2. 首屏默认「华东 / 上海」,省份下拉应仅含江苏、浙江、上海。

  3. 将区域改为「华北」→ 省份已选值被清空,选项变为北京、天津、山东。

  4. 选择「北京」后点查询 → 报表展示华北-北京 3 条销售明细。

  5. 修改省份不点查询时,报表主体应保持不变(仅下拉选项刷新)。

如下图所示:

5. 索引与进阶

序号

主题

说明

1

字典与主查分离

字典数据集专供下拉选项,勿与主查询共用同一带过滤的数据集,避免循环依赖

2

实际值 / 显示值

SQL 与 $参数名实际值(编码);下拉界面显示「显示值」;标题勿直接拼编码

3

三级联动

继续增加「城市」下拉:字典 SQL 写 WHERE area_code='${area}' AND province_code='${province}'

4

URL 传参

?area=EAST&province=JS 打开预览,优先级高于控件默认值

5

主子格

扩展汇总场景请配置左主格、上主格,避免联动查询后合计错位

6. 常见问题

Q:改了区域,省份选项没变化?
A:确认省份下拉的数据字典类型为数据集,且 SQL 含 ${area};绑定参数名与占位符一致;不要使用「自定义」字典。

Q:标题写成 $area + … 显示成 EAST、JS?
A:正常。$参数名 取的是实际值(编码)。标题请用固定文案,或从主数据集 JOIN 出的 area_name / province_name 字段展示中文。

Q:省份有选项,但查询无数据?
A:检查主数据集 SQL 中 areaprovince 是否与明细表编码一致(本示例用 EAST/JS 等编码,不是中文名);是否已点击「查询」。

Q:一改下拉整表就刷新?
A:正常联动只刷新选项。若整表刷新,检查是否误绑「改完即查」类自定义脚本;标准产品应仅「查询」按钮触发重算。

Q:首屏省份列表为空?
A:确认区域默认值已灌入;首屏会按默认参数做一轮联动刷新。区域为空时,省份字典因 WHERE area_code = '${area}' 无匹配而为空。

Q:汇总行数字不对?
A:与联动无关,请检查扩展方向、聚合类型及主子格是否指向正确主格。

7. 相关文档

上一篇参数报表下一篇仪表板概述