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)
我有以下 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)