SSRS =切换不改变文本

时间:2013-12-20 00:47:42

标签: tsql reporting-services ssrs-2008

任何人都可以帮助解释为什么当第一个开关值为0时它将变为红色,但是当它是文本值“已过期”(在查询中用CASE WHEN改变)时,文本仍为黑色。

这不起作用:

=Switch(Fields!Days_Until_Expiry.Value = "Expired", "Red"
, Fields!Days_Until_Expiry.Value > 1 AND Fields!Days_Until_Expiry.Value < 90, "Orange"
, Fields!Days_Until_Expiry.Value > 90, "Green")    

,   CASE
    WHEN DATEDIFF(d, c.Date_Expiration, SYSDATETIME()) > 0
    THEN 'Expired'
    [...]

这确实有效:

=Switch(Fields!Days_Until_Expiry.Value = 0, "Red"
, Fields!Days_Until_Expiry.Value > 1 AND Fields!Days_Until_Expiry.Value < 90, "Orange"
, Fields!Days_Until_Expiry.Value > 90, "Green")    

,   CASE
    WHEN DATEDIFF(d, c.Date_Expiration, SYSDATETIME()) > 0
    THEN 0
    [...]

这将是一个我无法找到的简单解释,不是吗......

[编辑]: 似乎问题出在查询中。

, CASE
    WHEN DATEDIFF(d, c.Date_Expiration, SYSDATETIME()) > 0
    THEN 'Expired'
    ELSE ABS(DATEDIFF(d, c.Date_Expiration, SYSDATETIME()))
  END AS Days_Until_Expiry

如何使此查询有效并让SSRS同时获取返回的int值和文本字符串?

1 个答案:

答案 0 :(得分:1)

从我看到的开关语句无法确定Days_Until_Expiry是返回字符串还是int。理想情况下(取决于您的SSRS版本)您应该看到#Error而不仅仅是空白文本框。

我尝试重新创建它(在SSRS 2008R2中),但我最终在输出窗口中看到文本框中的#Error并显示错误消息: textrun的值表达式'Textbox3.Paragraphs [0] .TextRuns [0]'包含错误:输入字符串的格式不正确。

当您更新CASE语句以便Days_Until_Expiry始终返回int时,Switch能够正确评估所有条件。

[编辑]:如果您尝试将字符串和整数值输入到SSRS中,以便可以进一步将状态评估为“红色”,“橙色”或“绿色”,则可以将CASE和SWITCH逻辑组合到CASE声明如下:

  

CASE
   当DATEDIFF(d,c.Date_Expiration,SYSDATETIME())&gt; 0
   然后'红'    当ABS(DATEDIFF(d,c.Date_Expiration,SYSDATETIME()))&gt; 1 AND ABS(DATEDIFF(d,c.Date_Expiration,SYSDATETIME()))&lt; 90个
      然后'橙色'       ELSE'Green'
    结束为Days_Until_Expiry

然后,您可以直接显示Days_Until_Expiry,而无需使用任何SWITCH语句。如果我错过了什么,请告诉我。