SSRS报告给出多值参数错误

时间:2018-07-05 16:24:25

标签: sql-server reporting-services ssrs-2008 ssrs-2012 reportbuilder

我在SSRS报告中声明了一个多值参数。该参数是“ Team”,它具有多个值,例如:“ All”,“ HY”,“ DFI”,“ CRS”等。 现在,我正在使用此参数来显示或隐藏报表中的各个列。

例如,或其中一列,可见性如下:

=IIF(Parameters!Team.Value = "HY", True,False) Or IIF(Parameters!Team.Value = "EQ", True,False) Or IIF(Parameters!Team.Value = "GL", True,False) Or IIF(Parameters!Team.Value = "CRS", True,False)

只要我从参数下拉列表中选择一个值,该报告就可以正常工作。但是我想选择多个值,因此我单击了“参数属性”下的“允许多个值”。这样做并运行报告后,出现以下错误:

  

tablix“ Tablix2”的隐藏表达式包含错误:   重载解析失败,因为无法使用来调用Public'='   这些论点:       '公共共享运算符=(a作为字符串,b作为字符串)作为布尔值':           参数匹配参数'a'无法从'Object()'转换为'String'。 (rsRuntimeErrorInExpression)

如何解决此错误?

更新:错误已得到解决。但是,当我在下拉列表中选择多个团队时,仍然无法解决显示组合列(这是在参数中添加多个值的目的)的目的。 “ DFI”和“ HY”,然后报表不显示两个团队的列,而是隐藏两个列。

谢谢。

2 个答案:

答案 0 :(得分:1)

由于您的team参数允许选择多个值,因此Parameters!Team.Value成为数组对象。这意味着您无法进行比较Parameters!Team.Value = "aString",因为它们是无法比较的类型。

为了获得所需的结果,必须将Parameters!Team.Value = "aString"调用更改为Join(Parameters!Team.Value,",").contains("aString")

Join函数返回一个由指定字符串分隔的Object数组。

示例:Join(Parameters!Team.Value,",")可以返回"HY,EQ,GL"

对于每组列,您都需要将每个团队的可见性设置为False,在这里您不希望隐藏列。

对于已选择“ DF”或“全部”的列:

=IIF(Join(Parameters!Team.Value,",").Contains("DF") OR Join(Parameters!Team.Value,",").Contains("ALL"), False,True)

对于已选择“ HY”或“全部”的列:

=IIF(Join(Parameters!Team.Value,",").Contains("HY") OR Join(Parameters!Team.Value,",").Contains("ALL"), False,True)

对于选择了“ EQ”或“ All”的列:

 =IIF(Join(Parameters!Team.Value,",").Contains("EQ") OR Join(Parameters!Team.Value,",").Contains("ALL"), False,True)

答案 1 :(得分:0)

请记住,当隐藏该列时,“ hidden”属性为True,而在显示该列时为False。您可以使用Array.IndexOf函数查找在多值参数中选择的特定值,并像这样设置每个小组的列(这是小组HY):

=IIF(Array.IndexOf(Parameters!Team.Value, "HY") > -1, False, True)

英语:“如果找到HY作为选定的参数值,请不要隐藏此列,否则请隐藏它。”