在SSRS中,我有一个多选的报告参数,默认标签为(无),默认值为0.
在我的查询中,我想设置它,以便我可以传入0或其他一些值。但是,如果我传入0,我不希望它过滤掉数据。
通常你会在where语句中添加以下子句,但我不确定是否或如何使用多个值。
(@ Parameter = 0 OR table.column = @Parameter)
答案 0 :(得分:2)
不知道我是否理解了这个问题,你将通过一个可能的值列表或0,对吗?...
如果是这样,也许您唯一要做的就是将参数设置为字符串('0'或'1,2,3')并执行这样的条件
(@Parameter = '0' OR table.column IN (@Parameter))
答案 1 :(得分:0)
您是在调用过程还是从SSRS运行直接查询?
如果您正在调用proc,您可以尝试在proc中确定是否需要进行任何过滤,例如
DECLARE @filter INT
SELECT @filter = LEN(@parameter)
-- or something similar to determine if there are any parameters
SELECT
-- everything you want
WHERE
@filter = 0 OR table.Column IN (@parameter)
答案 2 :(得分:0)
您不必完全按照用户将参数填入查询中的方式传递参数。
在数据集上,您可以拥有2个参数:
@Parameters
和@ApplyFilter
然后在数据集的“参数”选项卡上(参数名称=参数值):
@Parameters = @Parameters
@ApplyFilter = IIF(And(Parameters!Parameters.Value.Length = 1,Parameters!Parameters.Value(0)=0),"0","1")
最后,您的SQL过滤器需要类似于:
WHERE
(@ApplyFilter = 1 AND tbl.column IN (@Parameters))
我更喜欢这种解决方案的原因是因为您使查询更具可读性!