Разница между двумя значениями времени в отчете SSRS - PullRequest
0 голосов
/ 30 января 2020

У меня есть следующий оператор выбора:

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

, который возвращает следующие данные:

enter image description here

Я хотел бы используйте это, чтобы вычислить время, которое было проведено в здании.

Обратите внимание, что ET_TYPENO = 1 соответствует «Разрешенному нормальному входу», а ET_TYPENO = 2 - «Разрешенному нормальному выходу»

У меня есть следующее выражение в отчете ssrs

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

Но оно разрешается до следующих значений: #Error.

ОБНОВЛЕНИЕ

Ожидаемый результат

Рассчитать разницу во времени между «Допустимым нормальным входом» событие и событие «Разрешенный нормальный выход».

Возьмем, например, строки 2 и 3. «Разрешенный нормальный выход» произошел в 07:23:19, а «Разрешенный нормальный выход» - в 08:55:48. Мне нужно, чтобы вернуть разницу во времени между этими двумя разами. IE 1: 32: 29.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Исходя из ответа Хонновера Кулака, что параметр 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)
0 голосов
/ 30 января 2020

trtime необходимо преобразовать в тип DATE с помощью функции CDATE (), чтобы использовать функцию 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?

...