Существует требование отображать диапазон дат на основе следующей логики в отчете служб Reporting Services следующим образом:
Если есть только дата и время Started, отобразите так:
12 декабря 2014 г.
Если в один и тот же день есть даты начала и окончания, отобразите их следующим образом:
12 декабря 2014 г. с 11:20 до 13:10
Если есть время начала и окончания в разные дни, отобразите так:
с 12 декабря 2014 г., 11:20, и 13 декабря 2014 г., 13:10.
Я знаю, что это некрасиво, но у меня есть это выражение для отображения поля:
=IIf(IsNothing(First(Fields!Finished.Value, "InspectionAdvice")), "on " & Day(First(Fields!Started.Value, "InspectionAdvice")) & " " & MonthName(Month(First(Fields!Started.Value, "InspectionAdvice"))) & " " & Year(First(Fields!Started.Value, "InspectionAdvice")) & " " &
IIf(
Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12,
Hour(First(Fields!Started.Value, "InspectionAdvice")) - 12,
Hour(First(Fields!Started.Value, "InspectionAdvice"))
)
& ":" & Minute(First(Fields!Started.Value, "InspectionAdvice")) & " " &
IIf(Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12, "pm", "am")
,
IIf(First(Fields!Started.Value.Date, "InspectionAdvice") = First(Fields!Finished.Value.Date, "InspectionAdvice")
, "on " & Day(First(Fields!Started.Value, "InspectionAdvice")) & " " & MonthName(Month(First(Fields!Started.Value, "InspectionAdvice"))) & " " & Year(First(Fields!Started.Value, "InspectionAdvice")) & " between " &
IIf(
Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12,
Hour(First(Fields!Started.Value, "InspectionAdvice")) - 12,
Hour(First(Fields!Started.Value, "InspectionAdvice"))
)
& ":" & Minute(First(Fields!Started.Value, "InspectionAdvice")) & " " &
IIf(Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12, "pm", "am")
& " and " &
IIf(
Hour(First(Fields!Finished.Value, "InspectionAdvice")) > 12,
Hour(First(Fields!Finished.Value, "InspectionAdvice")) - 12,
Hour(First(Fields!Finished.Value, "InspectionAdvice"))
)
& ":" & Minute(First(Fields!Finished.Value, "InspectionAdvice")) & " " &
IIf(Hour(First(Fields!Finished.Value, "InspectionAdvice")) > 12, "pm", "am")
, "between " & Day(First(Fields!Started.Value, "InspectionAdvice")) & " " & MonthName(Month(First(Fields!Started.Value, "InspectionAdvice"))) & " " & Year(First(Fields!Started.Value, "InspectionAdvice")) & " " &
IIf(
Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12,
Hour(First(Fields!Started.Value, "InspectionAdvice")) - 12,
Hour(First(Fields!Started.Value, "InspectionAdvice"))
)
& ":" & Minute(First(Fields!Started.Value, "InspectionAdvice")) & " " &
IIf(Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12, "pm", "am")
& " and " & Day(First(Fields!Finished.Value, "InspectionAdvice")) & " " & MonthName(Month(First(Fields!Finished.Value, "InspectionAdvice"))) & " " & Year(First(Fields!Finished.Value, "InspectionAdvice")) & " " &
IIf(
Hour(First(Fields!Finished.Value, "InspectionAdvice")) > 12,
Hour(First(Fields!Finished.Value, "InspectionAdvice")) - 12,
Hour(First(Fields!Finished.Value, "InspectionAdvice"))
)
& ":" & Minute(First(Fields!Finished.Value, "InspectionAdvice")) & " " &
IIf(Hour(First(Fields!Finished.Value, "InspectionAdvice")) > 12, "pm", "am")
)
)
Все работает нормально, если значения Started и Finished не равны нулю. Однако, если Finished имеет значение null, я всегда получаю #Error.
Теперь, если я удалю вторую часть IIF, содержащую вложенную логику IIf, например.
=IIf(IsNothing(First(Fields!Finished.Value, "InspectionAdvice")), "on " & Day(First(Fields!Started.Value, "InspectionAdvice")) & " " & MonthName(Month(First(Fields!Started.Value, "InspectionAdvice"))) & " " & Year(First(Fields!Started.Value, "InspectionAdvice")) & " " &
IIf(
Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12,
Hour(First(Fields!Started.Value, "InspectionAdvice")) - 12,
Hour(First(Fields!Started.Value, "InspectionAdvice"))
)
& ":" & Minute(First(Fields!Started.Value, "InspectionAdvice")) & " " &
IIf(Hour(First(Fields!Started.Value, "InspectionAdvice")) > 12, "pm", "am")
,
"REMOVED"
)
Все работает, когда Finished равен нулю.
Любая идея, почему я не могу заставить обе части уродливого заявления работать вместе? Я предполагаю, что службы Reporting Services пытаются разрешить некоторые из IIF в ложном состоянии, которое попадет в поле NULL Finished и, таким образом, приведет к ошибкам?