reporting-services - 用于着色表行的嵌套 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。请帮帮我。
解决方案
这样它应该可以工作:
=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
推荐阅读
- python - 如何记录 Jupyter 笔记本输入以进行审计?
- sql - 在 SQL 中获取记录
- apache - Groovy - groovy 日期时间模块
- c# - XAML 中的“名称空间错误中不存在该名称”
- jquery - JQuery 淡入然后淡出延迟 - 不工作
- php - 使用 PHP 在 Mailchimp api 3.0 中禁用双重选择
- angular - 来自不同脚本的多个 Angular 元素
- apache - 使用 apache 将特定 HTTPS 请求重定向到特定端口
- json - 用于 json 的 t-sql 在结果中跳过列名
- python - 读取 CSV 并将数据上传到 Elasticsearch