2013-08-19 34 views
-2

我一直認爲,當一個存儲過程帶回一個空日期時間時,SSRS報告將在該單元中顯示意圖。根據我的經驗,事情並非總是如此。我無法弄清楚爲什麼。有時候,報告會顯示爲空白,有時候爲空的日期時間提供思路。這是爲什麼?SSRS和空日期時間

是否有規則或文件(這是有道理的),解釋了這是如何工作的?當您使用的工具不一致時,很難保持一致。我可以製作兩份完全相同的報告。一個會顯示頭腦,一個會在空日期時間顯示空白。我不明白。

編輯:

首先,是在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

幾乎每個結果都有人在談論關於他們想要空白的想法。許多結果來自Stack Overflow,所以在你開始告訴我它從未發生過之前,意識到你是錯誤的。你可能從未見過它。我從來沒有在我的食物中看到過我的食物和成千上萬次的食物都被切斷了手指。但這並不意味着它沒有發生在一個人.....一個是出分日期

例子:

報告文本框的表達式爲:

=Fields!SecondaryInjuryRecordDate.Value 

數字格式在佔位符屬性窗口中設置爲Date-> 01/31/2000。 非常簡單,沒有什麼奇怪的去那裏。對?

在PROC,該列的代碼是:

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

即導致MINDATE每當SecondaryInjuryDXDate爲null被顯示。我不得不切換到這個:

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

...當日期爲空時得到空格。

SecondaryInjuryDXDate是一個DATETIME和 SecondaryInjury是有點。

+2

在我的經驗,在數據集中NULL值*總*顯示爲空字符串,如果只是簡單地放入一個文本框。找不到任何官方消息來預測這種行爲。你有任何示例/ repro它顯示與mindate?我從來沒有見過(除非當然*數據集查詢*將提供mindate而不是NULL值)。 – Jeroen

+0

我不知道如何在報告,存儲過程,函數,數據庫等方面提供一個工作示例。 –

+0

它只是需要顯示一個mindate的示例情況。請參閱[這裏有關創建最小示例的幫助](http://sscce.org/)(它針對的是代碼,但也適用於報表等)。無論如何,如果沒有辦法重現這種情況,你就會發現我們很難說這個問題,我們只是猜測。 – Jeroen

回答

1

使用像這樣的文本表達:

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

我不認爲你真的看着我問你做了什麼。 –

1

它看起來像沒有被發現關於此文檔。下一個最好的事情是根據我們的集體經驗來做這件事。

假設的問題:「是什麼SSRS顯示與一個NULL值的DATETIME時做」 ......

...答案是它會顯示一個空字符串,而不是。有一種情況,除非你做一些工作,爲此自己一個NULL值將顯示爲別的,沒有重現的場景,例如:

  • 如果查詢聚結NULL別的東西,例如字符串「NULL」或MIN DATETIME;
  • 如果您有文本框值的表達式,例如IIF(Fields!MyDateTime.Value Is Nothing, "01-01-1900", Fields!MyDateTime.Value)
+0

我提供了一個例子,我可以一遍又一遍地重現和谷歌的結果,顯示許多其他人得到空日期mindates。 –

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中,默認情況下,一個空的DateTime值將被表示爲空字符串。

如果數據格式應用於該值,MIN DateTime值將代替空值例如可以使用:將所述日期時間爲ShortDate所述:

數字格式設定爲日期 - > 01/31/2000在佔位符屬性窗口中。非常簡單,沒有什麼奇怪的。對?

爲了避免這種情況,該列的值必須被包裹在有條件應用需要的格式的表達式:

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