Domanda

Sto riscontrando un problema con le espressioni nei rapporti. Sto colorando lo sfondo di una casella di testo all'interno di una tabella a seconda del valore al suo interno. Il testo nel campo si riferisce ai backup per un SQL Server. Il valore è una data o il testo "Non ancora preso". Se la data ha più di 2 giorni, voglio che lo sfondo sia giallo. Se ha più di una settimana o se il valore della data è "Non ancora preso", voglio che lo sfondo sia rosso. Altrimenti, sarà verde.

Il problema che ho avuto da quando ho iniziato con i report per SSRS (alcune settimane fa) è che le mie espressioni sembrano essere completamente valutate. Un'istruzione IF avrà sia i suoi valori veri che falsi valutati anche se ne verrà utilizzato solo uno.

Questo diventa un problema perché " Non ancora preso " chiaramente non è una data e per lavorare con le date ho bisogno di convertire la stringa della data in una data. Ecco il codice che ho attualmente:

=IIF(Fields!LastBackUpTaken.Value = "Not Yet Taken","Red", IIF( IsDate(Fields!LastBackUpTaken.Value) = true,
  IIF( CDate(Fields!LastBackUpTaken.Value).AddDays(Parameters!DaysTillExpiry.Value).CompareTo(NOW()) = 1,
          "GreenYellow",
      IIF( CDate(Fields!LastBackUpTaken.Value).AddDays(7).CompareTo(NOW()) = 1, "Yellow", "Red")),
  "Red"))

Quindi, in sostanza, l'espressione dice "Se LastBackUpTaken.Value =" non ancora preso ", restituisce il colore Rosso. Se non è " Not Yet Taken " ;, controlla se la stringa è una data. Se non è una data, restituisci il colore Rosso. Se è una data, calcoli e restituisci il colore appropriato.

Queste espressioni funzionano per tutti i campi di testo che non hanno " Non ancora preso " come il suo testo. Per i campi che hanno " Non ancora preso " poiché il suo testo non ha alcun set di colori.

EDIT: visualizzo anche un errore di conversione che ho dimenticato di menzionare, ogni volta che il testo è "Non ancora preso"

Qualche idea?

È stato utile?

Soluzione

Scrivi una funzione VB per restituire la stringa di colore nella scheda Codice delle proprietà del rapporto. Qui puoi usare costrutti linguistici con cui ti senti a tuo agio (dichiarazioni di casi, istruzioni if ??regolari, ecc.). Anche la logica sarà più facile da leggere.

Public Function GetBackgroundColor(ByVal DateString as String) As String
    'plain old vb syntax here
End Function

Nell'espressione per la proprietà del colore di sfondo:

=Code.GetBackgroundColor(Fields!LastBackUpTaken.Value)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top