SSRS多选参数错误

时间:2015-11-30 16:24:48

标签: sql reporting-services

我有一个项目,我需要添加一个接受多个值的参数。虽然这听起来很容易,但却无法正常工作。

以下是参数:@queue_group varchar(100)

以下是它的使用方法:and g.extension in (@queue_group)

现在当我手动执行此操作时:g.extension in ('700', '702')它可以正常工作。我必须将数字设为字符串,因为列的设置方式如下,它有一些字符串值,例如* 86,当我执行700, 702时会中断。

现在我在SSRS中设置了param,为它提供了可用值并允许多次选择,但每次它都不起作用,因为它找不到任何结果。最终的错误是除以零,这是因为它没有找到任何记录。

如何让SSRS模仿我'700', '702'的手动行为,当我删除参数并手动输入时,它运行得很好。

在SSRS中,我尝试过Available Values CS = 700, CS = '700', CS = =Cstr(700) and CP = 702, CP = '702', CP = =CStr(702)

我现在尝试设置一个表并将其用作参数的定义值。它现在可以在我选择单个选项并返回结果时起作用。每当我选择2时,它返回0结果。

我很茫然。

1 个答案:

答案 0 :(得分:1)

只要数据集在ssrs中,SSRS就可以支持多值参数而无需额外的工作。

以下是科技网的链接: https://technet.microsoft.com/en-us/library/aa337396(v=sql.105).aspx

SSRS将整个查询传递给sql编译器,这意味着在编译之前用多值字符串替换参数。所以我认为这不是问题,因为如果多值参数向编译器提供数据的方式是错误的,那么它就不会被零除。

相反,我认为这与填充参数的方式有关。您将参数设置为文本字段,因此人们应该输入自己的值。然而,SSRS在发送到编译之前处理文本字段的格式化,我猜这就是绊倒你。

如果在编译时输入“402,407”而没有引号进入参数,它将转换为:

and g.extension in ('402,407')

这不会返回任何结果。如果这只是您使用的报告,您可以输入:“402','407”,不带双引号,在编译时它也会转换它:

 and g.extension in ('402','407')

更好的解决方案是为param创建数据集,将参数设置为使用该数据集作为可用值列表,并检查param的多值属性。这样,您可以从下拉列表中选择多个值,用户不必弄乱字符串格式。