【问题标题】:SSRS expression that evaluates if any string in group matches parameter评估组中是否有任何字符串与参数匹配的 SSRS 表达式
【发布时间】:2019-12-03 15:42:10
【问题描述】:

我有一份 SSRS 报告,其中包含以下 DataSet

 Foo | Bar
-----------
  1  |  A
  2  |  A
  2  |  B

我在Tablix 中显示此数据,Foo 上有一个行分组。

 Foo | Quantity
----------------
[Foo]|[Count(Bar)]

以上产生:

 Foo | Quantity
----------------
  1  |    1
  2  |    2

我还有一个字符串参数bar,当此参数与在行组中找到的Bar 的任何值匹配时,我想突出显示数量单元格。

=IIf(Fields!Bar.Value = Parameters!bar.Value, "Plum", "Orange")

如果 bar 设置为 'A',上述表达式将为 Foo = 1 提供所需的行为,但不是 Foo = 2。

我看到了与布尔值相关的类似question,但该解决方案不适用于字符串。也许 SSRS 有一些我不熟悉的 Any 或 Contains 功能?

【问题讨论】:

    标签: reporting-services ssrs-2012


    【解决方案1】:

    如果我理解正确的话......

    我认为您的问题是您正在尝试评估每一行以查看 Bar 是否与您的参数匹配,但您要突出显示的单元格是一个聚合 - 它的值可能基于几行数据。

    您应该能够只获得匹配行的计数,如果该计数大于零,则突出显示该单元格。例如

    =IIF(
        SUM(IIF(Fields!Bar.Value = Parameters!bar.Value,1,0)) > 0
        , "Plum"
        , "Orange"
        )
    

    这只是将每一行评估为 1 或 0(匹配或不匹配),对结果求和,如果大于 0(我们找到匹配项)则返回“Plum”

    【讨论】:

      【解决方案2】:

      我认为解决您的问题的最佳方法可能是修改数据集查询以输出一个新字段 Foobar,该字段将 Bar 值连接到 Foo 分组上。使用STRING_AGGFOR XML PATH 如答案to this question,您应该能够获得如下数据:

       Foo | Bar | Foobar
      --------------------
        1  |  A  |   A
        2  |  A  |  A, B
        2  |  B  |  A, B
      

      通过这种方式格式化的数据,您可以使用.Contains 语法检查bar 参数的每个Foobar 值。

      = IIF(Fields!Foobar.Value.Contains(Parameters!bar.Value), "Plum", "Orange")
      

      另一个选项是InStr 函数。

      = IIF(InStr(Fields!Foobar.Value, Parameters!bar.Value) > 0, "Plum", "Orange")
      

      【讨论】:

        猜你喜欢
        • 2020-04-10
        • 2016-02-11
        • 2023-01-30
        • 2022-06-14
        • 1970-01-01
        • 2020-05-31
        • 1970-01-01
        • 2012-05-29
        • 2021-09-20
        相关资源
        最近更新 更多