Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql SQL报表生成器3.0多值参数_Tsql_Reporting Services_Ssrs 2008_Reportbuilder3.0 - Fatal编程技术网

Tsql SQL报表生成器3.0多值参数

Tsql SQL报表生成器3.0多值参数,tsql,reporting-services,ssrs-2008,reportbuilder3.0,Tsql,Reporting Services,Ssrs 2008,Reportbuilder3.0,我有一个报告,它需要在文本字段参数中接受数字范围和逗号分隔的值。该参数用于“Account Type”,他们希望能够输入“1,2,5-9”,这将采用整数值1,2,5,6,7,8,9。我知道如何用一个值来实现这一点,但从不使用范围 我将用于单个值的示例代码是: SELECT arcu.vwARCUAccount.AccountType ,arcu.vwARCUAccount.ACCOUNTNUMBER FROM arcu.vwARCUAccoun

我有一个报告,它需要在文本字段参数中接受数字范围和逗号分隔的值。该参数用于“Account Type”,他们希望能够输入“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

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

我并不完全精通tsql,但是使用reg表达式呢

例如:

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

我并不完全精通tsql,但是如何使用reg表达式呢

例如:

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

有几件事你想做

A.设置数据类型为“整数”的参数,并确保选中复选框“允许多个值”。将其值设置为“Ints”。现在还可以

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

B.创建一个名为“值”的简单数据集,如下所示

    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)
重要的部分是谓词,表示:

'where PersonID in(@Ints)'


这会告诉数据集它依赖于用户在此数组参数中选择值

有几件事你想做

A.设置数据类型为“整数”的参数,并确保选中复选框“允许多个值”。将其值设置为“Ints”。现在还可以

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

B.创建一个名为“值”的简单数据集,如下所示

    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)
重要的部分是谓词,表示:

'where PersonID in(@Ints)'


这会告诉数据集它依赖于用户在此数组参数中选择值

这可能行得通。作为一种画笔,请尝试:

  • 从tsql中删除帐户类型的筛选器

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

  • 函数测试(byval myin为整数,byval mylimits为字符串)为整数
    '结果为1或0
    dim mysplit as string()=拆分(mylimits,“”)
    将mysplit2设置为字符串(1)
    '查看所有以“,”分隔的项目“
    对于mysplit中的每个s作为字符串
    '是否存在范围,即“-”?
    如果s像“%-%”,那么
    mysplit2=拆分(s,“-”)
    '是介于此范围之间的值吗?
    
    如果myin>=mysplit(0)并且也有myin,这可能会起作用。作为一种画笔,请尝试:

  • 从tsql中删除帐户类型的筛选器

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

  • 函数测试(byval myin为整数,byval mylimits为字符串)为整数
    '结果为1或0
    dim mysplit as string()=拆分(mylimits,“”)
    将mysplit2设置为字符串(1)
    '查看所有以“,”分隔的项目“
    对于mysplit中的每个s作为字符串
    '是否存在范围,即“-”?
    如果s像“%-%”,那么
    mysplit2=拆分(s,“-”)
    '是介于此范围之间的值吗?
    
    如果myin>=mysplit(0)并且也是myin,那么我刚刚意识到这只适用于9以内的账号,也不适用于5-9之间的账号。我可以创建一个可以扩展列表的函数吗?有人知道我从哪里开始吗?你可以在报表生成器中使用vb函数,这样就可以了——不过我刚刚意识到,这只适用于9以下的账号,也不适用于5-9范围。我可以创建一个可以扩展列表的函数吗?有人知道我将从哪里开始吗?你可以在报表生成器中使用vb函数,这就可以了-我做了更多的研究,效果非常好。谢谢你的帮助。还有一个问题。如何将“All”值设为默认值?Jo如果需要默认值,我通常会在处理数组时设置第二个数据集作为默认值。因此,在步骤B中设置包含所有值的临时表时,请将另一个数据集设置为“默认值”。然后,对于其他步骤,请转到类似步骤C的参数,但选择“默认值”。只要所有默认值都在主列表的数组中,它就可以