【问题标题】:SSRS Expression Evaluation IssueSSRS 表达式评估问题
【发布时间】:2008-11-28 16:42:37
【问题描述】:

我在报告中遇到了表达式问题。我根据表格中的值为表格中的文本框的背景着色。该字段中的文本与 SQL Server 的备份有关。该值是日期或文本“尚未采取”。如果日期超过 2 天,我希望背景为黄色。如果它超过一周或日期值为“尚未采取”,我希望背景为红色。否则,它将是绿色的。

自从我开始编写 SSRS 报告(几周前)以来,我一直遇到的问题是我的表达似乎得到了全面评估。一个 IF 语句将同时评估其真值和假值,即使只使用其中一个。

这成为一个问题,因为“尚未采取”显然不是日期,并且要使用日期,我需要将日期字符串转换为日期。这是我目前的代码:

=IIF(Fields!LastBackUpTaken.Value = "Not Yet Taken","Red", IIF( IsDate(Fields!LastBackUpTaken.Value) = true,
  IIF( CDate(Fields!LastBackUpTaken.Value).AddDays(Parameters!DaysTillExpiry.Value).CompareTo(NOW()) = 1,
          "GreenYellow",
      IIF( CDate(Fields!LastBackUpTaken.Value).AddDays(7).CompareTo(NOW()) = 1, "Yellow", "Red")),
  "Red"))

所以基本上,表达式为“If LastBackUpTaken.Value = “Not Yet Taken”,返回红色。如果不是“Not Yet Taken”,检查字符串是否为日期。如果是'不是日期,返回红色。如果是日期,进行计算并返回适当的颜色。

此表达式适用于所有没有“尚未采用”作为其文本的文本字段。对于文本为“尚未采用”的字段,没有任何颜色设置。

编辑:每当文本为“尚未采用”时,我也会收到一个我忘记提及的转换错误

有什么想法吗?

【问题讨论】:

    标签: reporting-services evaluation expression operator-precedence


    【解决方案1】:

    编写一个 VB 函数以在报告属性的代码选项卡中返回颜色字符串。在这里,您可以使用您熟悉的语言结构(case 语句、常规 if 语句等)。逻辑也更容易阅读。

    Public Function GetBackgroundColor(ByVal DateString as String) As String
        'plain old vb syntax here
    End Function
    

    在背景颜色属性的表达式中:

    =Code.GetBackgroundColor(Fields!LastBackUpTaken.Value)
    

    【讨论】:

    • 谢谢!我知道该代码,但在尝试让它以我想要的方式与报告参数一起使用后并不是很喜欢它。没想到这是一个解决方案,但效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多