代码之家  ›  专栏  ›  技术社区  ›  Registered User

如何使用带多值参数的string.filter

  •  6
  • Registered User  · 技术社区  · 15 年前

    在SQL Server Reporting Services 2008 R2的“常用函数”->text->项下的“表达式生成器”窗口中,有一个名为“筛选器”的表达式。这似乎与 Strings.Filter method 在.NET框架中。过滤器说明如下:

    返回基于零的数组,该数组包含基于指定筛选条件的字符串数组的子集。

    示例如下:

    =Filter(Parameters!MultivalueParameter.Value, "3", True, CompareMethod.Binary)
    

    示例和说明意味着您可以检查多值参数,以查看所选值中是否至少有一个值等于匹配参数。我无法让它返回除错误以外的任何内容,这意味着多值参数不是一维数组。参数!MultiValueParameter.Value.GetType().ToString()返回System.Object[]。

    有人知道怎么让这个工作吗?我正在使用以下解决方法检查是否在多值参数中选择了值:

    =IIF(InStr(" " + JOIN(Parameters!MultivalueParameter.Value, " ") + " ", " 3 ", CompareMethod.Text), false, true)
    

    上面的代码是可行的,但它非常难看。如果它支持这种检查,我更愿意使用过滤函数。有人能举一个代码的例子吗?

    2 回复  |  直到 15 年前
        1
  •  6
  •   NakedBrunch    15 年前

    出现这个问题是因为在讨论中缺少来自msdn的示例。这是真的=过滤器(参数!multivalueparameter.value,“3”,true,comparemethod.binary)返回一个数组,但就SSR而言,不能简单地将数组输出到报表。这就是您看到错误的部分原因。

    此外,SSR似乎在处理过滤器功能的两个可选参数时遇到问题。把这些放在外面,你就可以走了。

    您可以通过输出 长度 将数组转换为textboc。

    =Filter(Parameters!MultivalueParameter.Value, "3").Length
    

    上面应该会产生一个文本框,其中包含过滤参数的整数长度。

    所以,把这些都拉在一起,你可以用以下方法达到你想要的结果:

    =IIF(Filter(Parameters!MultivalueParameter.Value, " 3 ").Length > 0, "false", "true")
    
        2
  •  2
  •   Dallas    15 年前

    我在SSR2008中使用了一个多值参数来显示/隐藏Tablix中的列。

    然而,我无法利用返回的实际子字符串,只能通过长度使用结果。

    =IIF(Filter(Parameters!MultiOption.Value,"3",true).Length>0,"T","F")
    

    因此,对于每一列(第1、2、3、4列),我将使用此代码(使用真/假部分,而不是如上所示的字符串)。

    其他尝试的想法是:

    =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,
    "",)
    

    如果存在子字符串值,则只返回有效的子字符串值。不过,情况并非如此。

    达拉斯

    推荐文章