2017-12-22 17 views
1

Ich habe einen SSRS Ausdruck mit diesem in ihm:SSRS Expression - #Error in einem offensichtlich richtigen Ausdruck

=IIF(
    Fields!CUT.Value.ToString().Length > 1 
    ,IIF(
     Fields!CUT.Value.ToString().Contains(","), 
     Fields!CUT.Value.ToString().Substring(0, Fields!CUT.Value.ToString().IndexOf(",")), 
     Fields!CUT.Value.ToString() 
    ) 
    ,"" 
) 

Übersetzung:
Wenn das Feld ein , enthält, Geben Sie mir die substring des Feldes von der ersten Position bis zum ,. Wenn das Feld , nicht enthält, hol mir einfach das gesamte Feld.

Probelm:
Ich bekomme eine #Error in allen Seiten, auf denen es kein Komma ist. Wenn es einen COMMA gibt, funktioniert es wie erwartet. Eines der Felder ist der Wert 4. In einem anderen Szenario lautet der Wert 17/64" Corrugated. Ich bekomme einen Fehler für beide.

Was ich habe versucht:
Ich habe ein paar verschiedene Ansätze versucht:

  1. Gebrauchte LIKE statt Contains

    =IIF(
        IsNothing(Fields!CUT.Value) 
        ,"" 
        ,IIF(
         Fields!CUT.Value LIKE "*,*", 
         Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1, (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1)) 
         Fields!CUT.Value 
        ) 
    ) 
    
  2. ich ein neues Feld hinzugefügt, um meine dataset, das , durch XXXX ersetzt. Ich dachte, vielleicht kann SSRS nicht verstehen, dass ich über einen , als Teil der Zeichenfolge spreche. Und dann änderte die Abfrage, um zu sehen, ob darin ein XXXX drin ist. hat immer noch die gleiche #Error

  3. die .data Datei löschen, um das Projekt zu reinigen, und das Projekt wieder aufgebaut. Denn das ist offensichtlich nicht inkorrekt. Also dachte ich, dass es sich vielleicht nicht um die neueste Version des Berichts handelt.

Nichts scheint es zu tun! Ich bin wirklich kurz davor, etwas Schlechtes zu tun! Dieses Ding macht mich wahnsinnig.

Fragen:

  1. Wer etwas falsch mit entweder meiner Ausdrücke sehen?
  2. Gibt es einen besseren Weg zu dem, was ich erreichen möchte? Wenn es eine , gibt, gib mir alles vor die ,. Wenn nicht, gib mir alles.

Edit 1:
bemerkenswert, dass in einem anderen Feld, ich etwas sehr ähnlich wie diese tue:

IIF(
    IsNothing(Fields!CUT.Value) 
    ,"" 
    ,IIF(
     Fields!CUT.Value LIKE "*,*" 
     ," | Length: " & Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1, (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1)) 
     ,"" 
    ) 
) 

Was dies tut, ist, wenn es eine ist , in das gleiche Feld, erhalten Sie mir alles nach , und fügen Sie es an | Length:. Wenn es keine , gibt, zeigen Sie einfach eine leere Stelle "". Das funktioniert ganz gut. In Situationen, wo es eine , gibt und wo es keine , gibt.Also habe ich festgestellt, dass Microsoft SSRS verwendet, um mich verrückt zu machen.

+0

SSRS alle Teile des 'IIF' wertet unabhängig davon, ob die erste Aussage wahr oder falsch ist, so dass Ihr Problem am meisten liegt wahrscheinlich in Ihrem wahren Abschnitt:' Felder CUT! .Value.ToString(). Substring (0, Felder! CUT.Value.ToString(). IndexOf (",")) '. Wenn kein Komma vorhanden ist, kann dieser Ausdruck die Position des Kommas nicht finden. Aber ich bin mir nicht sicher, wie sich die 'IndexOf'-Funktion genau verhält, und ich habe nicht die Mittel, sie im Moment zu testen, also ist das nur ein Kommentar. –

Antwort

1

Sie könnten dies mit SWITCH tun und zuerst auf kein Komma testen, aber es gibt einen viel einfacheren Weg, vorausgesetzt, Sie wollen immer nur den ersten Teil der Zeichenfolge bis zum Komma bringen.

Dies verwendet nur die Split-Funktion und nimmt das erste Element.

=(Split(Fields!CUT.Value, ",")).GetValue(0) 

Schön und einfach :)

+0

Danke. Ich habe nicht an 'Switch' gedacht. Das wäre definitiv einfacher gewesen. Aber ich habe bereits meine gespeicherte Prozedur geändert, um Ergebnisse in zwei verschiedenen Feldern zurückzugeben, so dass ich mich in SSRS nicht darum kümmern muss. Ich werde wahrscheinlich immer noch versuchen, Ihre für zukünftige Referenz. Danke –

+0

Markierung als Antwort, obwohl ich das nicht verwendet habe, weil das definitiv funktioniert. Sowohl "Switch" als auch "Split" funktionieren. Aber ich habe bereits einige wichtige Änderungen an der gespeicherten Prozedur vorgenommen. Also werde ich damit fortfahren. Danke. –