HowTo: Crystal Reports – Trotz Parameter in Datensatzauswahl NULL Werte in Bericht anzeigen

Vielleicht nicht gleich zu Anfang, aber irgendwann kommt der Moment der Erkenntnis für jeden Entwickler, der Crystal Reports von Business Objects als Report Designer verwendet. Möglicherweise hat man zwei Parameterfelder “Name1″ und “Name2″ im Feld-Explorer angelegt.
Diese Felder werden nun vielleicht genutzt, um unter “Auswahlformeln/Datensatzauswahl” mit der Abfrage

(
({Produkt.Proben_Name} LIKE {?Name1}) OR
({Produkt.Proben_Name} LIKE {?Name2})
)

in einem Bericht nur Datensätze anzuzeigen, die entweder bei der Planung des Berichtes den Eingaben bei Parameter “Name1” oder aber bei “Name2” entsprechen.

Soweit …. so gut ….

Mögicherweise wollen wir aber alle Datensätze, die der Eingabe bei Name1 oder Name2 entsprechen, sowie alle Datensätze, die in der Tabelle Produkte in der Spalte Proben_Name NULL Werte enthalten.
Der erste Gedanke wäre wahrscheinlich folgende Formel in die Datensatzauswahl zu schreiben:

(
({Produkt.Proben_Name} LIKE {?Name1}) OR
({Produkt.Proben_Name} LIKE {?Name2}) OR
(not IsNull({Produkt.Proben_Name}))
)

Erstaunt wird der Entwickler feststellen, dass Datensätze die NULL im Feld “Proben_Name” enthalten, trotz der scheinbar richtigen Abfrage, nicht dargestellt werden.
Noch viel erstaunlicher: Wenn der Entwickler auf die Idee kommt unter “Datenbanken/SQL-Abfrage anzeigen” sich die SQL Abfrage des Crystal Reports Designers anzeigen zu lassen und diese Abfrage in einem beliebigen SQL-Tool (z.B. SQL-Plus von Oracle oder TOAD von Quest Software) auszuführen, wird er feststellen, dass Datensätze mit NULL Werten sehr wohl durch die Abfrage abgedeckt werden.

Das Problem ist hier die Reihenfolge der Abfrage der Parameter.

({Produkte.Proben_Name} LIKE {?Name1})

verhindert, dass die NULL Werte überhaupt von Crystal Reports verarbeitet werden.

Um trotzdem zu dem gewünschten Ergebnis zu kommen, also alle Datensätze die entweder der Eingabe bei Parameter Name1 oder Name2 entsprechen oder die in der entsprechenden Spalte einen NULL Wert enthalten, anzuzeigen, muss die Datensatzauswahl wie folgt abgewandelt werden:

(
( (not IsNull({Produkt.Proben_Name}) AND ({Produkt.Proben_Name} LIKE {?Name1})) OR
( (not IsNull({Produkt.Proben_Name}) AND ({Produkt.Proben_Name} LIKE {?Name2})) OR
(not IsNull({Produkt.Proben_Name}))
)

Noch einfacher ist, die not IsNULL() Abfrage zuerst zu machen. Crystal Reports geht hier nämlich wirklich streng nach Reihenfolge vor:

(
(not IsNull({Produkt.Proben_Name})) OR
({Produkt.Proben_Name} LIKE {?Name1}) OR
({Produkt.Proben_Name} LIKE {?Name2})
)

2 comments to HowTo: Crystal Reports – Trotz Parameter in Datensatzauswahl NULL Werte in Bericht anzeigen

  • Tom

    Muss es anstelle von
    “not IsNull({Produkt.Proben_Name})”
    nicht
    “IsNull({Produkt.Proben_Name})” lauten??

    Schliesslich sollen in deiner Beschreibung ja NULL Werte explizit angezeigt werden, was mit deinem Beispiel aber nicht funktioniert. Ändert man das “not isnull” in “isnull” werden auch die NULL Werte korrekt angezeigt. Dieser Fehler ist in allen Beispielen vorhanden die du oben beschrieben hast.

    Gruss aus der Schweiz
    Tom

  • admin

    Korrekt! Ist korrigiert ….. danke Dir!

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>