SSRS-查询条件为空,查询所有数据,否者查询符合条件的数据 解决办法

在报表查询的时候,一般会有这样的要求!输入了查询条件就查询指定条件下的数据,没有输入数据的时候就查询所有!

 

最近在做SSRS的报表,需求中有这样的要求:对于查询条件参数,用户输入了值就查询!添加可多个值的参数以后,对于不输入的参数,并不能查询到相关的值!不能满足需求,试着自己弄了下但是没弄成功,在网上找了一下也没相关的资料!最终还是自己弄出来了!下面分享一下我的解决办法,有好的解决办法希望能提示一下!

 

下面是以Norhwind中的customers表为例,查询指定条件(customerid)下的所有数据!

1.  添加名称为Northwind共享数据源

2.  添加名称为CustomersReport的报表

3.  在报表数据中新建数据源 Northwind_Ref,使用共享数据源引用!

4.  添加CustomersDS,查询输入

SELECT* FROM Customers c WHERE (c.CustomerID IN(@CustomerID) OR @flag='')

完成以后会显示数据集和参数

@CustomerID这个是查询条件

@flag这个作转换用

5.  设置参数

@CustomerID:常规:允许空白值,允许多个值!默认值:指定值(=Space(0))

@flag:常规:允许空白值,允许null值,可见性隐藏!默认值:指定值(=Parameters!CustomerID.Value(0))

6.  添加表,拖入相应要显示的列,预览!

效果可以了,没有输入值,默认的加载了Customers表中所有记录!输入一个或者几个CustomerID时显示相应的数据!

 

貌似实现了需求了!

 

 这里有个bug,当我输入

ALFKI

ANATR

ANTON

AROUT

查询出来的数据4条是正常的,当我前面回车换行弄一个空的时候,就查询出来所有的数据!是查询条件是“,ALFKI,ANATR,ANTON,AROUT”原因很简单,参数@flag在设置默认值的时候是Parameters!CustomerID.Value(0),取的是第一个值也就是空值!

 

这个就头疼了一下,不好怎么处理

于是想到了内置的函数,对于数据参数@CustomerID进行了校验!修改@flag的默认值的表达式为如下:

=iif(Parameters!CustomerID.Count>1and Parameters!CustomerID.Value(0)="","这个只要不是空格就行",Parameters!CustomerID.Value(0))

 

这样再预览,测试OK!问题解决!

 

可以跟踪一下sql语句,查看下最终执行的语句!

 

测试代码下载

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值