手动输入多个参数,以逗号分隔

时间:2016-02-09 13:39:04

标签: reporting-services parameters ssrs-2008 reporting ssrs-2008-r2

我有一个报告可以将多个订单号作为参数,并为每个订单号返回一个子报表。目前,我有一个首先运行的查询,用所有可能的订单号填充参数列表,您可以滚动并选择您想要的那些。我宁愿你只是输入#s的顺序,所有都用逗号分隔..我不知道如何设置它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可以将参数数据类型设置为文本,然后创建拆分字符串函数,然后用户可以输入用逗号分隔的所有值。

你的where子句看起来像这样 -

WHERE Parameter IN (SELECT * FROM dbo.Split_String( @Parameter, ','))

拆分字符串函数 -

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
CREATE FUNCTION [dbo].[Split_String]
(
@List nvarchar(max),
@token nvarchar(5)
)  
RETURNS @RtnValue table 
(
--Id int identity(1,1),
Value nvarchar(100)
) 
AS  
BEGIN

SET @List = RTRIM(LTRIM(@List))
IF @List <> '' 
BEGIN
    WHILE (CHARINDEX(@token, @List)>0)
    BEGIN 

        INSERT INTO @RtnValue (value)
        SELECT Value = LTRIM(RTRIM(SUBSTRING(@List,1,CHARINDEX(@token,@List)-1))) 

        SET @List = SUBSTRING(@List,CHARINDEX(@token,@List)+LEN(@token),LEN(@List))

    END 

    INSERT INTO @RtnValue (Value)
    SELECT Value = LTRIM(RTRIM(@List))
END

RETURN
END

GO

答案 1 :(得分:1)

您是否尝试在参数中使用多值选项? 设置参数 设置一个简单的通用参数,如下图所示: 关键组件是允许多个值选项,允许您在参数中键入多个文本值。 更新数据集 然后在数据集中,确保像这样添加WHERE子句。 WHERE orders.ordernumber IN(@OrderNumbers) 这将确保您的数据被过滤为输入的订单号。 IN比较很重要,因为@OrderNumbers参数可以包含多个值。多值参数也被视为集合/数组,因此尝试使用=将导致类型不匹配。 测试 数据输入与您希望的略有不同,因为我们将使用回车来分隔订单号而不是逗号。 但是,当文本框失去焦点时,它会将文本的外观格式化为逗号。 请注意:您需要先选择下拉箭头,然后才能开始在文本框中输入内容。您无法使用折叠参数下拉列表键入值。