1

我对报告中的表达式有疑问。我正在根据表格中的值为表格中的文本框的背景着色。该字段中的文本与 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"))

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

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

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

有任何想法吗?

4

1 回答 1

3

编写一个 VB 函数,在 Report Properties 的 Code Tab 中返回颜色字符串。在这里,您可以使用您熟悉的语言结构(case 语句、常规 if 语句等)。逻辑也更容易读回。

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

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

=Code.GetBackgroundColor(Fields!LastBackUpTaken.Value)
于 2008-11-28T18:03:56.013 回答