Как исправить #Error при вычислении DateDiff с помощью оператора IIF в SSRS - PullRequest
1 голос
/ 28 июня 2019

Я создаю отчет в службах Reporting Services для отображения промежутков времени для занятий в классе в нашей программе.Один столбец, который был запрошен, должен показать общее количество часов между временем начала и окончания одного сеанса.Я использовал функцию DATEDIFF, показывающую DateInterval в часах как общее количество часов за один промежуток времени, но я получаю #Error, возвращаемую для пустых значений, которым не было назначено время начала или окончания.

Iдобавлен оператор IIF, чтобы пометить значения, которые являются пустыми, как «TBA», но это не сработало.Поскольку я приводил строку к значению datetime, я заключил оператор DATEDIFF в функцию CStr, но это также не работает.Наконец, я сделал простую вещь и установил текстовое поле для отображения числового значения, поскольку оно возвращает общее количество часов, но, конечно, это тоже не сработало.Мой код выглядит следующим образом:

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

Это должно показать, что значение "TBA" в пустых местах, но я все еще получаю #Error.Однако общее количество часов подходит для значений, которые не являются пустыми.Я проверил значение в наборе данных, чтобы убедиться, что оно возвращает пустое значение или значение, помеченное как NULL, и возвращает пустое значение.

1 Ответ

1 голос
/ 28 июня 2019

Я считаю, что проблема возникает в условном заявлении.Если Fields!BeginTime.Value является типом данных даты, сравнение его с "" может привести к получаемой вами ошибке.Я предлагаю использовать функцию IsNothing или просто проверить, является ли поле пустым.Два варианта следующие:

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

Или ...

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

С учетом сказанного вам не нужно использовать CStr, поскольку DateDiff вернетцелочисленное значение.Ваше текстовое поле должно быть установлено на Default или некоторый текстовый вариант, чтобы избежать ошибок там.Выражение вернет либо целое число, либо строку, поэтому числовой формат в текстовом поле не будет работать.

Кроме того, если у вас возникла та же проблема, когда нет EndTime, вы можете добавитьOR к условному исправлению.

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