2013-08-19 3 views
-2

Я всегда думал, что когда хранимая процедура вернула нулевое время и время, когда отчет SSRS будет показывать отзыв в этой ячейке. Дело в том, что по моему опыту это не всегда так. Я не могу понять, почему. Иногда отчет показывается пустым и иногда указывает на нулевое время. Почему это?SSRS и null datetime

Существуют ли правила или документация (что имеет смысл), которые объясняют, как это работает? Трудно быть последовательным, если используемые вами инструменты несовместимы. Я могу сделать два отчета, которые настроены точно так же. Один будет показывать символ, и один будет показывать пустое значение для нулевых дат. Я не понимаю.

EDIT:

Прежде всего, да MinDate, что случилось со многими. https://www.google.com/search?num=50&q=ssrs+null+date+show+blank&oq=ssrs+null+date+show+blank&gs_l=serp.3...8759.9774.0.9941.10.10.0.0.0.0.152.888.8j2.10.0....0...1c.1.25.serp..8.2.166.kl2WBVx4Ijw

Практически в каждом результате кто-то говорит о мыслях, когда хочет пустоту. Многие из результатов от переполнения стека, прежде чем вы начнете рассказывать мне, что это никогда не произойдет, поймите, что вы плохие. Возможно, вы никогда этого не видели. Я никогда не видел отрубленного пальца в своей пище за все свои годы еды и тысячи блюд. Это не значит, что не случилось с кем-то .....

Пример одного, который показывает дату мин:

В докладе выражение для текстового поля:

=Fields!SecondaryInjuryRecordDate.Value 

Формат форматирования номера был установлен в Date-> 01/31/2000 в окне свойств заполнителя. Довольно просто, ничего странного здесь не происходит. ПРАВИЛЬНО?

В ргос, код для этого столбца:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN '' ELSE l.SecondaryInjuryDXDate END AS SecondaryInjuryRecordDate 

Это привело к MinDate показывается всякий раз, когда SecondaryInjuryDXDate был нулевым. Мне пришлось переключиться на это:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN '' ELSE ISNULL(l.SecondaryInjuryDXDate, '') END AS SecondaryInjuryRecordDate 

... чтобы получить пробелы, когда дата была нулевой.

SecondaryInjuryDXDate - DATETIME и SecondaryInjury - это немного.

+2

В моем опыте значение NULL в наборе данных * всегда * будет отображаться как пустой string, если просто положить в текстовое поле. Невозможно найти официальный источник, который мог бы предсказать это поведение. Есть ли у вас какой-либо пример/репродукция, где он отображается вместе с маматом? Я никогда не видел этого (если, конечно, * запрос набора данных * не предоставил бы символ, а не значение NULL). – Jeroen

+0

Я понятия не имею, как я мог бы представить рабочий пример отчета, хранимую процедуру (процедуры), функции, базу данных и т. Д. –

+0

Это просто должна быть примерная ситуация, когда отображается символ. См. [Здесь о помощи по созданию минимального примера] (http://sscce.org/) чего-то (он нацелен на код, но работает и на такие вещи, как отчеты). В любом случае, без способа воспроизвести ситуацию, с которой вы столкнулись, нам очень сложно сказать что-либо о проблеме, мы просто угадываем. – Jeroen

ответ

1

использовать что-то вроде этого в выражении текстового поля:

=IIf(IsNothing(Fields!DateTime.Value), "", Fields!DateTime.Value) 
+0

Я не думаю, что вы на самом деле смотрели то, что я спросил. –

1

Похоже, что нет никакой документации можно найти об этом. Следующее лучшее, что нужно сделать, это Q & Документ, основанный на нашем коллективном опыте.

Предположив вопрос: «Что SSRS делать при отображении DATETIME со значением NULL» ...

... ответ он покажет пустую строку вместо. Там не воспроизводимый сценария, при котором значение NULL будет отображаться как и все остальное, если вы делаете некоторые работы с этой целью себя, например:

  • Если запрос срастается с NULL-то другое, например,строка «NULL» или MIN DATETIME;
  • Если у вас есть выражение для значения текстового поля, например. IIF(Fields!MyDateTime.Value Is Nothing, "01-01-1900", Fields!MyDateTime.Value)
+0

Я представил пример, который я могу воспроизвести снова и снова, а также результаты Google, которые показывают, что многие другие люди получают призывы к нулевым датам. –

1

Каждое поле, возвращаемое в SQL-запросе, получает присвоенный тип данных. Как правило, вы хотите сохранить даты, возвращаемые как даты от SQL, а не как строки. (Не форматировать дату в строку SQL ли, что как можно ближе к презентации слоя, как это возможно.).

Таким образом, вместо этого в запросе:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN '' ELSE l.SecondaryInjuryDXDate END AS SecondaryInjuryRecordDate 

Я хотел бы попробовать использовать:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN CAST(NULL AS DateTime) ELSE l.SecondaryInjuryDXDate END AS SecondaryInjuryRecordDate 

См SQL cast datetime для объяснения того, почему вы получаете 0 приведение к дате.

2

Внутри SSRS по умолчанию значение NULL DateTime будет представлено вместо пустой строки.

Если форматирование данных применяется к значению, значение MIN DateTime будет использоваться вместо нулевого значения, например: преобразование DateTime в ShortDate, как описано:

Номер форматирования был установлен Дата -> 01/31/2000 в окне свойств заполнителя. Довольно прямо, ничего странного здесь не происходит. ПРАВИЛЬНО?

Чтобы избежать этого, значение столбца должно быть завернуты в выражении условно применить требуемое форматирование:

=IIf(IsNothing(Fields!DateTimeField.Value), "", FormatDateTime(Fields!DateTimeField.Value, DateFormat.ShortDate))