在SSRS我有一个报表参数是多选,并有(无)和默认值的默认标签的0传递默认值到SSRS查询
在我的查询我想将它设置所以我可以传入0或其他值。但是,如果我传入0,我不希望它过滤掉数据。
通常情况下,您会将以下子句添加到您的where语句中,但我不确定是否或如何使用多个值完成此操作。
(@Parameter = 0或TABLE.COLUMN = @Parameter)
在SSRS我有一个报表参数是多选,并有(无)和默认值的默认标签的0传递默认值到SSRS查询
在我的查询我想将它设置所以我可以传入0或其他值。但是,如果我传入0,我不希望它过滤掉数据。
通常情况下,您会将以下子句添加到您的where语句中,但我不确定是否或如何使用多个值完成此操作。
(@Parameter = 0或TABLE.COLUMN = @Parameter)
不知道我理解的问题,你要通过一个可能的值列表或0,对吧?...
如果是这样,也许你唯一需要做的改变是将你的参数设置为字符串('0'或'1,2,3'),并做像这样的条件
(@Parameter = '0' OR table.column IN (@Parameter))
我会给你一个镜头,让你知道。谢谢。 – bkorzynski 2012-08-16 21:47:47
现在,我看到我写的东西,我认为它可能不工作,但如果你传递一个字符串与你想要的一些字符在beging和结束('#1#2#3#''为例如),并在条件'(@Parameter ='0'或charIndex('#'+ table.column +'#',@Parameter)> 0)''它可能会工作 – saul672 2012-08-16 21:57:31
条件使用charindex函数我会立即尝试。 – bkorzynski 2012-08-16 22:03:49
你调用一个过程或运行从SSRS直接查询?
如果你调用一个进程,你可以尝试在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)
直接从SSRS运行。 – bkorzynski 2012-08-16 21:48:10
然后改变运行一个程序,它更加可维护和灵活。 – 2012-08-16 21:48:42
这就是我想要做的,但我不能,因为我只读了数据库的访问权限,这是愚蠢的。 – bkorzynski 2012-08-16 21:50:06
您不必完全按照用户填充查询来传递参数。
在你的数据集,你可以有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))
我喜欢这个解决方案的原因是使您的查询更具可读性!
我正在尝试的是((@Parameter)OR table.Column in(@Parameter))这似乎工作,但它非常缓慢。 – bkorzynski 2012-08-16 21:38:33