SQL Report Builder 3.0多值参数

时间:2013-01-08 00:41:42

标签: tsql reporting-services ssrs-2008 reportbuilder3.0

我有一个报告,需要在文本字段参数中接受数字范围和逗号分隔值。该参数用于“帐户类型”,他们希望能够输入“1,2,5-9”,并且将采用1,2,5,6,7,8,9的整数值。我知道如何使用单个值执行此操作但从不使用范围。

我将用于单个值的示例代码是:

    SELECT
      arcu.vwARCUAccount.AccountType
      ,arcu.vwARCUAccount.ACCOUNTNUMBER
    FROM
      arcu.vwARCUAccount
    WHERE
      arcu.vwARCUAccount.AccountType = @AccountType

任何信息都会非常有用。我的团队中的某个人已经估计了它,并说它可以在没有意识到他们想要一个范围的情况下完成,所以现在我被困住了。我打赌这里的每个人都在我的位置,所以我提前感谢大家。

4 个答案:

答案 0 :(得分:1)

你想做几件事。

一个。设置数据类型为“整数”的参数,并确保选中“允许多个值”复选框。将它的值设置为'Ints'。现在打得好。

这实质上设置了一个数组可用列表,您可以为该类型的数据类型定义一个可以传递多个数据集的数据集。

B中。创建一个名为“values”的简单数据集,就像这样

    declare @Ints table ( id int);

    insert into @Ints values (1),(2),(5),(6),(7),(8),(9)

℃。在第一步中返回您的变量并打开它的属性。在侧窗格中选择“可用值”。选择单选按钮“从查询中获取值”。将您的数据集列为“值”,将您的值和标签列为“id”。

您现在已将参数数组绑定到指定的值。然而,用户不必只选择其中一个或全部,而是选择其中一个或多个。

d。您需要设置主数据集(我假设您在来之前已经做过)。为了我的例子,我将做一个简单的。我创建了一个名为person的数据集:

    declare @Table Table ( personID int identity, person varchar(8));

    insert into @Table values ('Brett'),('Brett'),('Brett'),('John'),('John'),('Peter');

    Select *
    from @Table
    where PersonID in (@Ints)

重要的部分是谓词显示:

'其中PersonID在(@Ints)'

这告诉数据集它依赖于用户来选择此数组参数中的值。

答案 1 :(得分:0)

我对tsql并不完全熟练但是使用reg表达式呢?

请参阅LIKE (Transact-SQL)

如:

arcu.vwARCUAccount.AccountType like '[' + replace(@AccountType, ',','') + ']'

答案 2 :(得分:0)

查看 use of Multivalue parameter link

它可能对你有帮助。

答案 3 :(得分:0)

这可行。作为一个骄傲的刷子尝试:

  1. 从tsql中删除帐户类型的过滤器。

  2. 创建一个输入数字的vb函数,这是帐户类型,并测试它是否在用户提供的参数字符串中并输出1或0. Vb Functions

  3.     Function test(byval myin as integer, byval mylimits as string) as integer
        'results as 1 or 0
    
          dim mysplit as string()= Split(mylimits, ",")
          dim mysplit2 as string(1)
    
          'look through all separated by a ","
          For Each s As String In mysplit 
    
            'does there exists a range, i.e. "-"? 
            if s like "%-%" then
              mysplit2 = split(s, "-")
    
              'is the value between this range?
              if myin >= mysplit(0) andalso myin <= mysplit(1) then 
                return 1
              end if
    
            'is the value equal to the number?
            elseif s = myin then
              return 1
    
            end if
          Next s
    
          return 0
    
        End
    

    3。使用vb函数在数据集上创建过滤器,并将帐户类型作为输入等于1。

        =code.test(Fields!AccountType.Value, Paramaters!MyPar.Value)