在SSRS 2008 R2中切换条件格式的表达式

时间:2015-02-02 12:27:36

标签: sql-server reporting-services switch-statement ssrs-2008-r2 conditional-formatting

我有这个条件格式表达式(用于背景颜色),它可以正常工作:

=SWITCH(
Fields!Fire_Safety.Value = "F", "LimeGreen",
Fields!Fire_Safety.Value = "i", "Red",
Fields!Fire_Safety.Value = "E", "Yellow",
TRUE,Nothing
)

我现在已经更改了数据表(通过SQL),以便“F”的位置 - 现在有日期。

我将Switch表达式(在SSRS中)更改为:

=SWITCH(
Fields!Fire_Safety.Value <= dateadd("d",90,Today()),"Orange",
Fields!Fire_Safety.Value >= dateadd("d",91,Today()),"LimeGreen",
Fields!Fire_Safety.Value  = "i", "Red",
Fields!Fire_Safety.Value = "E", "Yellow",
TRUE,Nothing
)

它失败了。日期字段似乎有效,但不是“i”和“E”。

我想它一定是语法,但我有点迷失......有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你在评论中说过:

  

所以我猜这意味着Switch可以做文本或日期,但不能同时做这两个?

没有。在谓词中,您可以使用您喜欢的任何数据类型,请考虑以下简单示例:

=SWITCH(
    "A" = "B", 1,
    1 = 0, 2,
    TRUE, 3)

第一个表达式比较字符串,第二个表达式比较整数这一事实是无关紧要的,所有对switch函数真正重要的是谓词的结果,即上面的例子与下面的例子没有区别:

=SWITCH(
    FALSE, 1,
    FALSE, 2,
    TRUE, 3)

实际问题来自以下表达式:

Fields!Fire_Safety.Value  = "i"

无论嵌入什么内容,你都会收到错误。

=IF(Fields!Fire_Safety.Value  = "i", 1, 0)

会出现同样的错误。

问题是,由于Fields!Fire_Safety.Value是一个日期,为了将日期与字符串进行比较,必须首先将字符串转换为日期,并且“i”不能转换为日期,因此您得到一个错误。如果你的专栏只包含日期,那么第三和第四个条件永远不会是真的,所以它们也可能被移除。