评估组中的任何字符串是否与参数匹配的 SSRS 表达式

SSRS expression that evaluates if any string in group matches parameter

我有一份 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 功能?

如果我没理解错的话....

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

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

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

这只是将每一行评估为 1 或 0(匹配或不匹配),对结果求和,如果它大于 0(我们找到了匹配)则 return "Plum"

我认为解决您的问题的最佳方法可能是修改数据集查询以输出一个新字段 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")