首页 > 解决方案 > 用于着色表行的嵌套 SWITCH 语句取决于字段值

问题描述

我是 SSRS 报告的新手,我有一个问题让我发疯了好几天。

我创建了一个报告,其中每一行代表类别或子类别。我需要为每一行设置唯一的背景颜色。我已经尝试了很多 SWITCH 和 IIF 语句的组合,但没有一个能像我需要的那样工作。

有一组类别和子类别,如下所示:

A - 类别A

A - categoryA.A01 - subcat A01

A - 类别A.A01 - 子目录 A01.A01A - 子目录 A01A

A - categoryA.A02 - subcat A02

B - 类别B

C - 类别C

D - 类别D

...

考虑到类名是可以改变的,而且每个子类名中都包含了所有父类的名称,用点号隔开,我使用Split()和Left()函数来获取类名或子类名开头的代码,只此代码不会更改。

这种表达方式比其他表达方式效果更好,但并不完全如其应有的那样。它为同一级别的子类别设置相同的颜色。

=Switch(Left(Fields!Category.Value,1) = "A",
IIF(Split(Fields!Category.Value, ".").length = 1,
"#e4daf3",
IIF(Split(Fields!Category.Value, ".").length = 2,
"#8db4e2",
IIF(Split(Fields!Category.Value, ".").length = 3,
"#ebf1de","#00ff00"))),
Left(Fields!Category.Value,1) = "B", "#fdd9d9",
Left(Fields!Category.Value,1) = "C", "#fcffd4", 
Left(Fields!Category.Value,1) = "D", "#8de2de", 
Left(Fields!Category.Value,1) = "E", "#c6e6fd"
)

我试图在很多方面使这个表达更好,就像这样:

IIF(Split(Fields!Category.Value, ".").length = 1,
"#e4daf3",
IIF(Split(Fields!Category.Value, ".").length = 2 AND Left(Split(Fields!Category.Value, ".")(1),3) = "A01",
"#8db4e2",
IIF(Split(Fields!Category.Value, ".").length = 2 AND Left(Split(Fields!Category.Value, ".")(1),3) = "A02",
"#ff0000",
IIF(Split(Fields!Category.Value, ".").length = 3 AND Left(Split(Fields!Category.Value, ".")(2),4) = "A01A",
"#0000ff","#00ff00")))),
Left(Fields!Category.Value,1) = "B", "#fdd9d9",
Left(Fields!Category.Value,1) = "C", "#fcffd4", 
Left(Fields!Category.Value,1) = "D", "#8de2de", 
Left(Fields!Category.Value,1) = "E", "#c6e6fd"
)

但是这个表达式以某种方式仅将背景颜色设置为子类别,根类别清晰,根本没有背景。

也许我什么都没看到,或者有一些规则禁止使用嵌套的 SWITCHes 和 IIF。请帮帮我。

标签: reporting-servicesreportbuilderssrs-2016

解决方案


这样它应该可以工作:

=Switch(Fields!Category.Value = "A - categoryA", "Red",
        Fields!Category.Value = "A - categoryA.A01 - subcat A01", "Blue",
        Fields!Category.Value = "A - categoryA.A01 - subcat A01.A01A - subcat A01A", "Green",
        Fields!Category.Value = "A - categoryA.A02 - subcat A02", "Yellow",
        Fields!Category.Value = "B - categoryB", "Grey",
        Fields!Category.Value = "C - categoryC", "Black",
        Fields!Category.Value = "D - categoryD", "Orange")

如果你想使用Split(),这就是你正确使用它的方式:

=Split("Test.Again", ".")(0)   ' Result: Test
=Split("Test.Again", ".")(1)   ' Result: Again

推荐阅读