2016-08-22 79 views
0

我有一些基本的表達方式來突出某些領域:SSRS表達式中的比較日期

=IIF(Fields!Failure.Value > 0, "Red", "Transparent") 

不過,我有一個包含以下格式的日期另一個領域:

22/08/2016 22/08/2016 - each field can contain multiple dates. 

這是存儲在SQL中作爲VARCHAR。

我需要在我的報告中運行一個類似的表達,以實現以下目標:

如果日期是1天比報告運行日期的,突出的領域。如果日期大於1天,請突出顯示不同的顏色。

我熟悉基本表達式,但我想不出一種簡單的方法來獲取當前日期,然後在兩者之間進行比較。

+0

使用日期數據類型,而不是varchar,來存儲日期。 – jarlh

+0

不幸的是,我不能這樣做,因爲單個包含多個日期條目。 – PnP

+0

這是一個更糟糕的設計問題......永遠不要將數據存儲爲逗號分隔的項目。這隻會導致你很多麻煩。 – jarlh

回答

1

正如其他人所說,你真的不應該用這樣的黑客被...

但是,這應該工作你:

=iif(Len(Replace(Replace(Fields!DateField.Value," ",""), Format(Today, "dd/MM/yyyy"),"")) = 0, "Transparent" ,iif(Len(Replace(Replace(Replace(Fields!DateField.Value," ",""), Format(Today, "dd/MM/yyyy"),""), Format(Today().AddDays(-1), "dd/MM/yyyy"),"")) = 0, "Green", "Red")) 

本質上,刪除加入字符(在這種情況下,空間),然後以給定的格式替換當前日期的所有實例。如果還有任何字符,您的日期與今天不符。然後取這個值,並重復昨天的任何事例。

顯然,如果您的日期格式更改,則會下降。
但是,那麼你已經知道,比較日期作爲字符串是一個壞主意,對...

+0

當我嘗試運行報表時(我用我的數據集值替換了DateField.Value)時出現錯誤。 – PnP

+0

請粘貼錯誤消息和表達式。 – iamdave

+0

另外,你是否替換了DateField的兩個實例? – iamdave

1

您可以使用Split函數生成一個值數組。當然,你仍然需要選擇其中一個來測試。以下可能會讓你再次去。

=Iif(
    CDate(
     Split(
      "21/08/2016, 22/08/2016", 
      "," 
     ).GetValue(0) 
    ) < Today, 
    "True", 
    "False" 
) 

但是,如果你正在處理一個日期字符串,可以包含任意數量的日期,你來測試他們都那麼簡單SSRS表達式將無法處理的。幸運的是,我們可以使用一些自定義代碼。

右鍵單擊報告背景並選擇報告屬性。點擊「編碼」項,以下內容粘貼到代碼框中

Public Function TestDate(DateString As String) As String 
    Dim DatesArray() As String = Split(DateString) 
    Dim ReturnValue As String = "Transparent" 
    For Each d As String In DatesArray 
     If Date.Parse(d) = DateAdd(DateInterval.Day, -1, Date.Today) Then 
      ReturnValue = "Red" 
     End If 
     If Date.Parse(d) < DateAdd(DateInterval.Day, -1, Date.Today) Then 
      ReturnValue = "DarkRed" 
     End If 
    Next 
    Return ReturnValue 
End Function 

現在改變表達如下

=Code.TestDate("21/08/2016 22/08/2016") 

我用Date.Today在VB限制日期的比較到今天。如果你想更精確,即:準確的時間,使用Date.Now代替

+0

按照給定示例中的格式,您需要在空間上分割,而不是逗號。 – iamdave

+0

它將在一個空間中,但是,我無法將日期硬編碼到Split()中。我將如何自動填充給定字段的所有值? – PnP

+0

因此,用你的數據集字段替換硬日期的字符串,例如Split(Fields!MyFieldName.Value) –