在报表查询的时候,一般会有这样的要求!输入了查询条件就查询指定条件下的数据,没有输入数据的时候就查询所有!
最近在做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语句,查看下最终执行的语句!