在 SSRS 中使用 IIF 语句计算 DateDiff 时如何修复#Error

How to Fix #Error When Calculating a DateDiff With an IIF Statement in SSRS

我正在 Reporting Services 中创建一个报告,以显示我们计划中课堂会话的时间跨度。请求的一栏是显示一个会话的开始时间和结束时间之间的总小时数。我使用了一个 DATEDIFF 函数,将以小时为单位的 DateInterval 显示为一个时间跨度内的总小时数,但我得到了一个 #Error 返回,用于尚未分配开始或结束时间的空白值。

我添加了一个 IIF 语句来将空白值标记为 "TBA",但这没有用。由于我将字符串转换为日期时间值,因此我将 DATEDIFF 语句包含在 CStr 函数中,但这也不起作用。最后,我做了一件简单的事情,将文本框设置为显示数字值,因为它返回的是总小时数,当然,这也不起作用。我的代码如下:

=IIF(Fields!BeginTime.Value = "", "TBA", CStr(DateDiff(DateInterval.Hour, Fields!BeginTime.Value, Fields!EndTime.Value)))

它应该在空白处显示 "TBA" 值,但我仍然收到 #Error。但是,对于不为空的值,总小时数很好。我检查了数据集中的值,看它是否返回空白值或标记为 NULL 的值,而它返回的是空白值。

我认为问题出在条件语句中。如果 Fields!BeginTime.Value 是日期数据类型,将其与 "" 进行比较可能会导致您收到错误。我建议使用 IsNothing 函数或仅检查该字段是否为空。两个选项如下

=IIF(IsNothing(Fields!BeginTime.Value), ...    

或者...

=IIF(Fields!BeginTime.Value Is Nothing, ...

也就是说,您不需要使用 CStr,因为 DateDiff 会 return 一个整数值。您的文本框应设置为 Default 或某些文本变体,以防止出现错误。该表达式将 return 为整数或字符串,因此文本框上的数字格式将不起作用。

此外,如果您在没有 EndTime 时遇到同样的问题,您可能需要在条件中添加一个 OR 来解决这个问题。

 =IIF(IsNothing(Fields!BeginTime.Value) OR IsNothing(Fields!EndTime.Value), ...