比较 SSRS 中的两个日期时出现空日期问题

问题描述 投票:0回答:1

我正在尝试通过比较来自数据集的两个日期来设置 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)

但是如果它们中的任何一个是空的,我就会得到红色背景颜色而不是白色。

reporting-services ssrs-2012
1个回答
1
投票

我不确定您是否需要自定义代码来执行此操作,您应该能够在表达式中使用

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

我针对一个简单的数据集进行了测试,并得到了预期的结果。

© www.soinside.com 2019 - 2024. All rights reserved.