【问题标题】:Entering multiple parameters manually, separated by comma手动输入多个参数,以逗号分隔
【发布时间】:2016-02-09 13:39:03
【问题描述】:

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

【问题讨论】:

  • 您可以使用两个参数,一个是内部的,另一个是可见的。对于可见参数,请使用文本数据类型。确保您的用户键入以逗号分隔的订单号。然后在内部参数中使用Split(),通过逗号覆盖内部参数。将内部参数传递给要过滤的查询。如需进一步帮助,请编辑您的问题并提供更多详细信息。

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


【解决方案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

【讨论】:

    【解决方案2】:

    您是否尝试过在参数中使用多值选项?

    设置参数

    设置一个简单的通用参数,如下图所示:

    关键组件是允许多个值选项,它允许您在参数中输入多个文本值。

    更新数据集

    然后在您的数据集中,确保您像这样添加WHERE 子句。

    WHERE orders.ordernumber IN (@OrderNumbers)
    

    这将确保您的数据被过滤到输入的订单号。 IN 比较很重要,因为@OrderNumbers 参数可能包含多个值。多值参数也被视为集合/数组,因此尝试使用= 将导致类型不匹配。

    测试

    数据输入与您希望的略有不同,因为我们将使用回车符来分隔订单号而不是逗号。

    但是,当文本框失去焦点时,它会将文本的外观格式化为逗号。

    请注意:您需要先选择下拉箭头,然后才能开始在文本框中输入内容。您不能在参数下拉列表折叠的情况下键入值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多