评估组中的任何字符串是否与参数匹配的 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_AGG
或 FOR 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")
我有一份 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_AGG
或 FOR 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")