簡體   English   中英

SSRS比較表達式中的日期

[英]SSRS comparing dates in an expression

我有一些基本表達式來突出顯示某些字段:

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

但是,我還有另一個字段,其中包含以下格式的日期:

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

這作為VARCHAR存儲在SQL中。

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

如果日期比報表運行日期早1天,請突出顯示該字段。 如果日期早於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")

我已經在VB中使用Date.Today來限制日期與當天的比較。 如果您想更精確,即:確切的時間,請使用Date.Now代替

正如其他人所說,您確實不應該使用這種黑客手段...

但是,這應該為您工作:

=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"))

本質上,刪除連接字符(在這種情況下為空格),然后以給定格式替換當前日期的所有實例。 如果還剩下任何字符,那么您的日期與今天不匹配。 然后取該值,並在昨天的任何情況下重復。

顯然,如果您的日期格式更改,這將下降。
但是您已經知道,將日期作為字符串進行比較是一個壞主意,對吧...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM