【问题标题】:Switch expression for conditional formatting in SSRS 2008 R2SSRS 2008 R2 中条件格式的切换表达式
【发布时间】:2015-02-02 12:27:35
【问题描述】:

我有这个条件格式表达式(用于背景颜色),效果很好:

=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”无效。

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

【问题讨论】:

  • 检查你的输出(CTRL+ALT+O),是否返回任何错误信息?
  • 考虑到您将Fields!First_Aid.Valuedateadd("d",90,Today()) 进行比较,那么我假设First_Aid 是一个日期,在这种情况下您无法将其与"i""e" 进行比较。我怀疑您想在您的第 3 和第 4 个条件下将 Fire_Safety"i""e" 进行比较。
  • @mmix 是的,我收到此错误“从字符串“i”到类型“日期”的转换无效”。所以我猜这意味着 Switch 可以做文本或日期,但不能两者兼而有之?

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


【解决方案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”不能转换成日期,因此你得到一个错误。如果您的列仅包含日期,则第 3 和第 4 个条件永远不会为真,因此最好将它们删除。

【讨论】:

  • -嘿,感谢 Gareth 的详细解释。非常感激。我的列包含日期和“我”和“E”,所以我可能需要回到我的数据表。深思熟虑 - 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多