【问题标题】:Difference between two time values in SSRS reportSSRS 报告中两个时间值之间的差异
【发布时间】:2020-01-30 14:32:40
【问题描述】:

我有以下选择语句:

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

返回以下数据:

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

请注意,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。我需要它来返回这两次之间的时间差。 IE。 1:32:29。

【问题讨论】:

  • 你能添加你想要的结果吗,这将有助于了解你到底需要什么
  • 两件事:根据您的示例数据,您永远不会得到返回的间隔,因为您的ET_TYPENO 列是 1 或 2,而不是表达式正在检查的“OUT”。尝试将最后的 "" 更改为 Nothing,因为这样可以防止出现数据类型问题。
  • 感谢@AlanSchofield。 "out" 是一个错字。在实际代码中为 2。感谢您推荐 NOTHING 类型。
  • @AnkUser 请查看预期结果的更新
  • 错误信息是什么?它应该在错误列表中提供一些有用的描述。

标签: reporting-services ssrs-2012


【解决方案1】:

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 不应该吗?

【讨论】:

  • 感谢您的建议。我仍然收到错误。
  • 我已将查询更改为 DATETIMEFROMPARTS() 而不是 TIMEFROMPARTS()。
【解决方案2】:

从 Honnover Fist 的回答中得到建议,即 DateDiff 的参数需要是 Dates 而不是 Times。 (文档确实说时间会起作用)。我已将查询更改为 DATETIMEFROMPARTS() 而不是 TIMEFROMPARTS()

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多