Правильно отображать TimeSpan в SSRS

У меня есть значение TimeSpan 00:02:02.0 в основном 0 часов 2 минуты 2 секунды и 2 миллисекунды.

У меня всегда будет 0 часов. Как форматировать ssrs для чтения 2.02.0? Я знаю, что вы можете сделать =Fields!FinishTime.Value.ToString("mm:ss:fff"), однако он всегда выдает #error в качестве значения.

Спасибо!


person Community    schedule 06.08.2014    source источник


Ответы (2)


Вы довольно близки, ToString() правильный, поскольку SSRS не знает, как работать с TimeSpans, но вам нужно будет обернуть его Format, чтобы использовать строку формата, и преобразовать ее обратно в дату, чтобы использовать шаблоны форматирования даты:

=Format(CDate(Fields!FinishTime.Value.ToString()), "mm:ss:fff")

ИЗМЕНИТЬ:

Если ваш набор данных содержит NULL, вы не сможете использовать простой IIF(IsNothing(Fields!FinishTime.Value), Nothing, <format formula>), потому что IIF не закорачивает, и вы увидите #error, когда он попытается использовать функцию ToString() для NULL. Вместо этого попробуйте какой-нибудь пользовательский код (получено из сообщения на форуме MSDN):

Function FormatTimeSpan(TS as TimeSpan) as String
Dim DT as new DateTime(TS.Ticks)
Return DT.ToString("mm:ss:fff")
End Function

И назовите это так:

=IIF(IsNothing(Fields!FinishTime.Value), Nothing, Code.FormatTimeSpan(Fields!FinishTime.Value))
person stubaker    schedule 06.08.2014
comment
Хороший! Как вы справляетесь, когда время перепутано? он показывает #error примерно для 2 из 70 результатов - person ; 07.08.2014
comment
Я пробовал =IIF(Len(Fields!FinishTime.Value) › 1,,Format(CDate(Fields!FinishTime.Value.ToString()), mm:ss:f)) но все равно получаю ошибку - person ; 07.08.2014
comment
Зависит от того, что возвращают 2 результата, чтобы дать вам ошибку #. Я предполагаю, что NULL все равно вызовет проблемы, поэтому вы можете использовать IsNothing() для проверки этого, но может быть проще всего проверить, что возвращает запрос для этих строк. - person stubaker; 07.08.2014
comment
stu- это null, но я должен вернуть эти строки, Isnothing по-прежнему выдает #Error - person ; 07.08.2014

Есть гораздо более простой способ сделать это, если вы используете источник данных SQL Server. В своем операторе SQL используйте это, когда вы выбираете поле FinishTime:

SELECT Convert(datetime, TableName.FinishTime) AS FinishTime, ...

Он отлично обрабатывает нули, и вы можете использовать встроенные параметры форматирования в SSRS для его форматирования.

person Rono    schedule 06.04.2020