本帖最后由 lucas.Yan 于 2024-9-4 16:05 编辑
如下图,
需要实现在可选参数为多值的时候,不选择参数值,默认查询全部数据,即允许多选参数为空。
核心点:
1.动态SQL:
- select * from 销售明细 where 1=1" & IIF(IsNothing(Parameters!p1.Value) OR JOIN(Parameters!p1.Value,"") = " ",""," and 销售大区 in ('" & JOIN(Parameters!p1.Value,"','") &"')
复制代码
2.参数下拉项增加空字符串。
- select ' ' 销售大区 union select distinct 销售大区 from Demo_销售明细 order by 1
复制代码
参考报表文件见本帖附件
实现步骤:
1.创建报表,添加报表参数;
2.设置参数的可选值和默认值;
添加数据集,作为地区参数的可选值数据来源:
- select ' ' 销售大区 union select distinct 销售大区 from Demo_销售明细 order by 1
复制代码 解释:由于多值参数为必选参数,因此在数据表distinct销售大区基础上添加一行空文本,变相实现可不选。
参数下拉效果:
3.在报表中添加动态SQL:
- select * from 销售明细 where 1=1" & IIF(IsNothing(Parameters!p1.Value) OR JOIN(Parameters!p1.Value,"") = " ",""," and 销售大区 in ('" & JOIN(Parameters!p1.Value,"','") &"')
复制代码
解释:用IIF函数来判断参数是否为空或者空字符串,如果为真,则sql为select * from 销售明细 where 1=1,否者执行含参数值的完整SQL,
例如:
- select * from 销售明细 where 1=1 and 销售大区 in ('东北','华北','华东')
复制代码 |
|