将多选输入参数作为具有IN条件的数据集参数传递 - SSRS

时间:2014-07-15 13:31:51

标签: sql reporting-services ssrs-2008 bids

我有一个带有输入参数P_Region的报告,允许用户选择1- *选项。然后,我需要将此参数的结果传递给DataSet查询。如果我只选择一个选项但是如果我选择两个选项则不行。

我有什么:

它的DataSet参数设置为:
    = join(参数!P_Region.Value,",")

查询是:
    在哪里......和D.City IN(@P_Region)

我尝试了几件不同的事情,也没有运气:
    =分割(参数!Item.Value,",")
    =分段(加入(Parameters!@ReportParameter1.Value,""),"")
    在哪里D.Region IN(SELECT * FROM dbo.split(@Department))没有运气。

非常感谢任何帮助!

解决方案:(抱歉,我觉得这是一个非常简单的解决方案,但我没有在网上看到它,而且我是SSRS的超级新手)

  1. 右键单击数据集
  2. 转到参数选项卡并将查询参数设置回默认值(无连接或拆分)
  3. 转到“过滤器”选项卡,然后在参数中添加要包含的字段的表达式,选择运算符" In"并将值设置为[@<'参数名称'>']
  4. 注意:了解查询仍将返回其他记录,但只会过滤它们。如果您要返回大量数据并且使用的数据很少,这可能不是最佳选择。

3 个答案:

答案 0 :(得分:1)

我认为你在WHERE D.Region IN(SELECT * FROM dbo.split(@Department))的正确轨道上没有运气。

我使用tabled值函数来创建过滤表并在那里解析值。

WHERE D.Region IN (SELECT ID FROM dbo.CreateIntIDTable(@Department)) 


ALTER FUNCTION [dbo].[CreateIntIDTable](@IDList NVARCHAR(3000))
RETURNS @T TABLE (ID INT)
AS BEGIN
    WHILE(CHARINDEX(',',@IDList)>0)BEGIN
        INSERT INTO @T
        SELECT LTRIM(RTRIM(SUBSTRING(@IDList,1,CHARINDEX(',',@IDList)-1)))
        SET @IDList = SUBSTRING(@IDList,CHARINDEX(',',@IDList)+LEN(','),LEN(@IDList)) 
    END
    INSERT INTO @T SELECT  LTRIM(RTRIM(@IDList))
    RETURN
END

答案 1 :(得分:0)

尝试为您的选择下拉列表创建单独的数据集,然后您可以使用where where条件。

代表

1)数据集(SELECT Company FROM Companymaster ORDER BY Company)

2)在哪里     公司(@CompanyName)

答案 2 :(得分:0)

您是否设置了参数属性以接受多个值? 如果属性设置正确,则无需执行任何“加入”或“拆分”功能。