在“公共功能”下的“SQL Server Reporting Services 2008 R2”中的“表达式”构建器窗口中 - >文字 - > Item,有一个名为Filter的表达式。这看起来与.NET框架中的Strings.Filter method相对应。 Filter的描述如下:
返回一个从零开始的数组,该数组包含基于指定过滤条件的String数组的子集。
示例如下:
=Filter(Parameters!MultivalueParameter.Value, "3", True, CompareMethod.Binary)
示例和说明意味着您可以检查多值参数,以查看是否至少有一个选定值等于Match参数。我无法让它返回除#Error以外的任何内容,这意味着多值参数不是一维数组。参数!MultivalueParameter.Value.GetType()。ToString()返回System.Object []。
有谁知道如何让它发挥作用?我正在使用以下方法来检查是否在多值参数中选择了值:
=IIF(InStr(" " + JOIN(Parameters!MultivalueParameter.Value, " ") + " ", " 3 ", CompareMethod.Text), false, true)
上面的代码有效,但它非常难看。如果它支持这种检查,我宁愿使用Filter函数。任何人都可以提供一个有效的代码示例吗?
答案 0 :(得分:6)
问题正在发生,因为来自MSDN的示例在某种程度上缺乏此讨论。确实= Filter(Parameters!MultivalueParameter.Value,“3”,True,CompareMethod.Binary)返回一个数组,但就SSRS而言,您不能简单地将数组输出到报表中。这是你看到错误的部分原因。
此外,SSRS似乎在处理Filter函数的两个可选参数时遇到问题。把它们留下来,你会很高兴。
您可以通过将数组的长度输出到textboc来立即测试它。
=Filter(Parameters!MultivalueParameter.Value, "3").Length
上述内容应该会产生一个文本框,其中包含已过滤参数的整数长度。
因此,将所有这些结合起来,您可以通过以下方式获得所需的结果:
=IIF(Filter(Parameters!MultivalueParameter.Value, " 3 ").Length > 0, "false", "true")
答案 1 :(得分:2)
我在SSRS 2008中使用了一个多值参数来显示/隐藏Tablix中的列。
但是我从来没有能够利用返回的实际子字符串,只能通过长度来使用结果。
=IIF(Filter(Parameters!MultiOption.Value,"3",true).Length>0,"T","F")
因此,对于每一列,(第1第2和第3列),我将使用此代码(true / falsepart不是如上所示的字符串)。
其他尝试过的想法是:
=Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString
哪个可以输出3,但是在错误的条件下,GetValue(0)超出范围。
=IIF((Filter(Parameters!MultiOption.Value,"3",true).Length>0),
Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString,
"",)
实际上只应返回子字符串值(如果存在)。尽管如此,它并没有成功。
达拉斯