我正在尝试通过比较来自数据集的两个日期来设置 SSRS/Report Builder 中的单元格背景。问题是,当任何一个日期为空时,它应该返回白色,但由于它们是日期,我无法让那部分工作。
我的密码是:
Function BackgroundColorFromDates(byVal FirstDate as Date, byVal SecondDate as Date ) As String
return IIF(
IsNothing(FirstDate) Or IsNothing(SecondDate),
"White",
IIF(
FirstDate <= SecondDate,
"Red",
"Green")
)
End Function
这是从这样的背景表达式中调用的:
=Code.BackgroundColorFromDates(Fields!Date1.Value,Fields!Date2.Value)
但是如果它们中的任何一个是空的,我就会得到红色背景颜色而不是白色。
我不确定您是否需要自定义代码来执行此操作,您应该能够在表达式中使用
SWITCH()
来完成。
这是未经测试的,但我认为它会起作用,如果没有让我知道,我稍后会测试它。
= SWITCH(
IsNothing(Fields!Date1.Value) OR IsNothing(Fields!Date2.Value), "White",
Fields!Date1.Value < Fields!Date2.Value, "Red",
True, "Green"
)
SWITCH()
在找到第一个计算结果为 true 的表达式时停止,因此它应该首先捕获空值。
OP回复后编辑
功能版
这种方式似乎有点笨拙,比我拥有更好 VB.NET 知识的人可能会改进它,但它似乎有效。
首先我添加了一个简单的函数来查看当日期为 null/nothing 时传递给函数的内容。
Function StringFromDate(byVal FirstDate as Date) As String
return FirstDate.ToString
End Function
我添加了一个临时列来显示这个函数的结果...
它似乎不完全为空,但评估日期为 01-01-0001 。我从中得到了字符串输出,然后与这个字符串进行了比较,而不是与
Nothing
进行比较,它似乎有效。
Function BackgroundColorFromDates(byVal FirstDate as Date, byVal SecondDate as Date ) As String
return IIF(
IsEmptyDate(FirstDate) Or IsEmptyDate(SecondDate),
"White",
IIF(
FirstDate < SecondDate,
"Red",
"Green")
)
End Function
Function IsEmptyDate (byVal FirstDate as Date) As Boolean
return FirstDate.ToString = "1/1/0001 12:00:00 AM"
End Function
我针对一个简单的数据集进行了测试,并得到了预期的结果。