SSRS 报告中两个时间值之间的差异

Difference between two time values in SSRS report

我有以下 select 声明:

SELECT [TR_DATE]
      ,[TR_TIME]
      ,RIGHT('000000' + CONVERT(varchar,TR_TIME), 6)
      ,TIMEFROMPARTS(SUBSTRING(RIGHT('000000' + CONVERT(varchar,TR_TIME), 6),1,2), SUBSTRING(RIGHT('000000' + CONVERT(varchar,TR_TIME), 6),3,2), SUBSTRING(RIGHT('000000' + CONVERT(varchar,TR_TIME), 6),5,2),0,0) as trtime
      ,[ET_TYPENO]
      ,[ET_NAME]
  FROM [DB400].[dbo].[TRANSACTIONREPORT]
  where DEPT_NAME = 'GIJIMA AST HOLDINGS (PTY) LTD'
  /*and LOC_NAME = 'Front Door and Gate'*/
  and TR_DATE between '20200120' and '20200130'
  order by TR_DATE, MST_LASTNAME, MST_FIRSTNAME, TR_TIME

其中 return 是以下数据:

我想用它来计算在建筑物中花费的时间。

请注意,ET_TYPENO = 1 等同于“允许正常输入”,ET_TYPENO = 2 等同于“允许正常输出”

我在 ssrs 报告中有以下表达式

=iif(Fields!ET_TYPENO.Value=2,
DateDiff(DateInterval.Hour, previous(Fields!trtime.Value),Fields!trtime.Value),
"")

但它解析为以下 #Error

更新

预期结果

计算“Allowed Normal In”事件和“Allowed Normal Out”事件之间的时间差。

以第2、3行为例。 “Allowed Normal In”发生在 07:23:19,“Allowed Normal Out”发生在 08:55:48。我需要它 return 这两个时间之间的时差。 IE。 1:32:29.

trtime需要用CDATE()函数转换成DATE类型才能使用DATEDIFF函数

=IIF(Fields!ET_TYPENO.Value = "OUT", 
    DateDiff(DateInterval.Hour, CDATE(previous(Fields!trtime.Value)), CDATE(Fields!trtime.Value)),
    NOTHING)

此外,不应该 Fields!ET_TYPENO.Value = 1 吗?

根据 Honnover Fist 的回答中的建议,DateDiff 的参数需要是日期而不是时间。 (文档确实说 Time 会起作用)。我已将查询更改为 DATETIMEFROMPARTS() 而不是 TIMEFROMPARTS().

然后我将条件更改为以下代码,以便更准确地显示小时数。

=IIF(Fields!ET_TYPENO.Value = 2, 
    DateDiff(DateInterval.Minute, previous(Fields!TR_DATETIME.Value), Fields!TR_DATETIME.Value) / 60,
    NOTHING)