1

在SSRS我有一个报表参数是多选,并有(无)和默认值的默认标签的0传递默认值到SSRS查询

在我的查询我想将它设置所以我可以传入0或其他值。但是,如果我传入0,我不希望它过滤掉数据。

通常情况下,您会将以下子句添加到您的where语句中,但我不确定是否或如何使用多个值完成此操作。

(@Parameter = 0或TABLE.COLUMN = @Parameter)

+0

我正在尝试的是((@Parameter)OR table.Column in(@Parameter))这似乎工作,但它非常缓慢。 – bkorzynski 2012-08-16 21:38:33

回答

2

不知道我理解的问题,你要通过一个可能的值列表或0,对吧?...

如果是这样,也许你唯一需要做的改变是将你的参数设置为字符串('0'或'1,2,3'),并做像这样的条件

(@Parameter = '0' OR table.column IN (@Parameter)) 
+0

我会给你一个镜头,让你知道。谢谢。 – bkorzynski 2012-08-16 21:47:47

+0

现在,我看到我写的东西,我认为它可能不工作,但如果你传递一个字符串与你想要的一些字符在beging和结束('#1#2#3#''为例如),并在条件'(@Parameter ='0'或charIndex('#'+ table.column +'#',@Parameter)> 0)''它可能会工作 – saul672 2012-08-16 21:57:31

+0

条件使用charindex函数我会立即尝试。 – bkorzynski 2012-08-16 22:03:49

0

你调用一个过程或运行从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) 
+0

直接从SSRS运行。 – bkorzynski 2012-08-16 21:48:10

+0

然后改变运行一个程序,它更加可维护和灵活。 – 2012-08-16 21:48:42

+0

这就是我想要做的,但我不能,因为我只读了数据库的访问权限,这是愚蠢的。 – bkorzynski 2012-08-16 21:50:06

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)) 

我喜欢这个解决方案的原因是使您的查询更具可读性!