2017-02-14 3 views
1

Zurück mit einer SSRS Frage. Hier ist das Szenario ..Bedingte Formatierung in SSRS mit Code teilen

Mein Bericht enthält eine Zelle, die ein bedingtes Format mit der folgenden Logik haben sollte:

If AV has value: 
= 0 ; Then value has to be in "Silver"   (White) 
<= 0.6 ; Then value has to be in "CornflowerBlue" (Blue) 
<= 0.8 ; Then value has to be in "Tomato"   (Red) 
> 0.7 ; Then value has to be in "Gold"   (yellow) 
> 0.6 ; Then value has to be in "LightGreen"  (Green) 

ich dann meinen Code divide erstellt ...

Public function ColorValue(ByVal _AV as Double) As Double 

IF _AV = 0 Then 
    Return "silver" 

Else 
    IF _AV >= (0.8) Then 
     Return 'Tomato' 
    Else 
     IF _AV >= (0.7) Then 
      Return 'Gold' 
     Else 
      IF _AV >= (0.6) Then 
       Return 'LightGreen' 
      Else   
       Return 'CornflowerBlue' 
      END IF 
     END IF 
    END IF 
END IF    

End Function 

und halten auf diesen Fehler bekommen: enter image description here Ich habe noch nie eine Funktion in VB erstellt und so habe ich meine Code teilen zu dieser bestehenden Funktion ..

Public Function FillLowValue(ByVal _target As Double, ByVal _strValue 
As String) As String Dim _value As Double  If _target = Nothing 
Then 

     Return "Silver" 
    End If 

    If _strValue = "N/A" Then 
     Return "Silver" 
    Else 
     Double.TryParse(_strValue, _value) 
    End If 

    If _value < (_target - (_target * 0.2)) Then 
     Return "CornflowerBlue" 
    Else 
     If _value >= (_target + (_target * 0.2)) Then 
      Return "Tomato" 
     Else 
      If _value <= _target Then 
       Return "LightGreen" 
      Else 
       Return "Gold" 
      End If 
     End If 
    End If 

     Return "Silver" 
    End Function 

Ich habe auch den folgenden Fehler gegoogelt und erreichte bis Seite 10 ohne Glück bei meinen Suchen. Hoffentlich könnte mir jemand wenigstens eine Idee geben, wo man hinschauen kann.

PS: Könnten Sie bitte auch meine IF-Logik überprüfen?

auch versucht, diesen Ansatz, der den Bericht akzeptiert, aber das Rück keinen Wert auf die Zelle selbst

Public Function ColorValue(ByVal _AV As Double) As String 

If value = 0 Then 
                Return "Silver" 
            ElseIf value >= 0.8 Then 
                Return "Tomato" 
      ElseIf value >= 0.7 AND value < 0.8 Then 
       Return "LightGreen" 
      ElseIf value >= 0.6 AND value < 0.7 Then 
       Return "Gold" 
      ElseIf value > 0.6 Then 
       Return "CornflowerBlue" 
End If 

End Function 

Vielen Dank im Voraus

Antwort

0

Es scheint, dass Sie ungültige Werte aus der ColorValue Funktion zurückkehren.

In der Zeile 6 geben Sie Return 'Tomato' mit einem Anführungszeichen zurück. Sie müssen doppelte Anführungszeichen für Strings verwenden.

Return "Tomato" 

Return "Gold" 

Return "LightGreen" 

Return "CornflowerBlue" 
+0

Hallo Vielen Dank für Ihre Antwort Ich habe auch versucht, diesen Ansatz: Public Function Colorvalue (ByVal _AV As Double) As String Wenn Wert = 0 Then Return "Silver" ElseIf Wert> = 0,8 Dann Return "Tomate" \t \t \t ElseIf Wert> = 0,7 und Wert <0,8 Dann \t \t \t \t Return "Lightgreen" \t \t \t ElseIf Wert> = 0,6 und Wert <0,7 Dann \t \t \t Return "Gold" \t \t \t ElseIf Wert> 0,6 Dann \t \t \t \t Return "CornflowerBlue" End If End Function Die Bericht akzeptiert, gibt aber keinen Wert für die Zelle zurück. –

+0

@JosephCzarCorpus, Wie von Trevor erwähnt, gibt Ihre Funktion ein Double zurück, aber Sie geben eine Zeichenfolge zurück, d. H. "Gold". –

1

würden Sie besser, eine Select Case-Anweisung zu verwenden, wie unten dargestellt. Es ist aber auch etwas mit deinen Grenzen nicht in Ordnung ... < = 0.8 Konflikte mit> 0.6 und> 0.7 wie in der Frage geschrieben. Ich gehe davon aus, dass du mit deinem Code> = 0,8 gemeint hast.

Der Rückgabetyp von Double ist auch hier nicht gültig. Da ich nicht sagen kann, was du wirklich wolltest, habe ich es auf Farbe umgestellt.

Public Function ColorValue(ByVal _AV As Double) As Color 
    Select Case _AV 
     Case 0 : Return Color.White 
     Case Is >= 0.8 : Return Color.Tomato 
     Case Is <= 0.6 : Return Color.CornflowerBlue 
     Case Is > 0.7 : Return Color.Gold 
     Case Else : Return Color.LightGreen 
    End Select 
End Function 

Wenn Sie es wirklich als Nummer benötigen, verwenden Sie diese stattdessen.

Public Function ColorValue(ByVal _AV As Double) As Integer 
    Select Case _AV 
     Case 0 : Return Color.White.ToArgb 
     Case Is >= 0.8 : Return Color.Tomato.ToArgb 
     Case Is <= 0.6 : Return Color.CornflowerBlue.ToArgb 
     Case Is > 0.7 : Return Color.Gold.ToArgb 
     Case Else : Return Color.LightGreen.ToArgb 
    End Select 
End Function 

Wenn Sie Farbnamen benötigen .... dann

Public Function ColorValue(ByVal _AV As Double) As String 
    Select Case _AV 
     Case 0 : Return "White" 
     Case Is >= 0.8 : Return "Tomato" 
     Case Is <= 0.6 : Return "CornflowerBlue" 
     Case Is > 0.7 : Return "Gold" 
     Case Else : Return "LightGreen" 
    End Select 
End Function 

Wenn Sie wirklich, wirklich dann verdoppeln müssen ....

Public Function ColorValue(ByVal _AV As Double) As Double   
    Select Case _AV 
     Case 0 : Return CDbl(Color.White.ToArgb) 
     Case Is >= 0.8 : Return CDbl(Color.Tomato.ToArgb) 
     Case Is <= 0.6 : Return CDbl(Color.CornflowerBlue.ToArgb) 
     Case Is > 0.7 : Return CDbl(Color.Gold.ToArgb) 
     Case Else : Return CDbl(Color.LightGreen.ToArgb) 
    End Select 
End Function 

Obwohl ich bin nicht sicher, ob diejenigen, werden alle richtig konvertieren.

+0

Hallo @Trevor Dank dafür habe ich tatsächlich die Case-Anweisung-Methode ausprobiert. Aber versuchen Sie Ihre. Für die "Öffentliche Funktion ColorValue (ByVal _AV als Double) als Double" Ich bin nicht sehr sicher, was die zweite "As Double" tut .. Ich habe es nur zu einem bestehenden code.divide gemustert. Was ich versuche zu tun ist, formatieren Sie den Wert der Zelle (in diesem Fall ist es ein%), um die obigen Farben nach Logik zu zeigen. SSRS Adressen diese Farben als "Silber", "Tomato", "CornflowerBlue", "Lightgreen" und "Gold" Werden Sie Ihre Codes jetzt versuchen und zurück :) Danke wieder! –

+0

Cool, vergessen Sie nicht, diese Antwort zu akzeptieren, wenn es für Sie funktioniert –

+0

Dieser Teil ist außerhalb meines Wissensbereiches, aber viel Glück damit. –