润乾报表参数查询实现默认全选并查询的两种技术方案

需求

在润乾报表的参数查询功能开发中,常见的一个业务场景是:当用户未做任何选择(页面初次展示时),参数模板下拉多选默认选择全部,系统应自动查询出全部数据,而非显示空白。当用户自己选择参数值,根据对应的参数可再次过滤数据。本文将详细介绍实现此需求的两种标准技术方案。
· SQL 原生条件 in (?) or ? is null 写法
· 动态参数拼接 SQL 写法

方案一:SQL 原生条件 in (?) or ? is null 写法

此方法的核心思路是在数据集 SQL 的 WHERE 条件中,通过 OR ? IS NULL 语句判断参数是否为空。若参数为空,则忽略该查询条件,从而实现“不选即查全部”的效果。

实现步骤

1、编辑报表数据集 sql 并设置数据集参数

SELECT * from 订单 WHERE 货主地区 in (?) or ? is null

5png

2、定义报表参数 area,参数类型设置为字符串组

6png

3、设计报表

8png

4、编辑参数模版

9png

其中
1、B1 单元格右侧属性扩展方式改为‘不可扩展’
2、web 变量名称设置为 area。
3、B1 单元格右击选择编辑风格,选择下拉数据集并设置显示列、数据列以及勾选允许多选和允许编辑。

方案二:利用动态参数实现 SQL 动态拼接

此方案利用润乾报表的动态参数 ${参数名},在报表运算前动态拼接 SQL 字符串,从而实现更灵活的条件控制,尤其适用于多选下拉或多关键词模糊查询场景。

实现步骤

1、编辑报表数据集 sql 为:select * from 订单 ${arg1},无需设置数据集参数。
2、定义报表参数

· 新增普通参数 area,数据类型为字符串,参数类型为 “普通参数”。
· 新增动态参数 arg1,数据类型为字符串,参数类型为 “动态参数”,值表达式填写如下:
if(@area == null || @area == ““,“1=1”,“where 货主地区 in”+”(”+“’” + replace(string(area), “,”, “‘,’”)+ “’” +“)”)

11png

表达式说明:
· @area == null || @area == "":判断参数是否为空。
· replace(string(area), “,”, “‘,’”):将多值参数的逗号分隔值,转换为 ‘值 1’,‘值 2’,‘值 3’ 的格式,适配 SQL in 语法;
· 空值时返回 1=1,SQL 条件恒成立,查询全部数据;非空时返回完整的 where 条件片段。

3、设置报表

报表和参数模版都和方案一中一样。

报表报表并预览:(查询全部.gif)

gif

总结:
方案一侧重于利用 SQL 自身的逻辑判断,简单直接;方案二则通过动态参数改变了 SQL 的执行形态,更加灵活高效。