BI Abfragen
Aus PPwiki
Inhaltsverzeichnis
1 Parameter
- Bei optionalen Parametern wird zu Anfang der Zeile (Bedingung) ein Fragzeichen geschrieben (ohne Einrückung!), z.B. ?AND B_AUFTRCOL.FORM = :FORM.
- Gibt es nur optionale Parameter, muss hinter dem WHERE erstmal ein Ausdruck folgen, der immer wahr ist (z.B. 1=1).
- Parameter als IN (Multiselect): WHERE ... IN (:Parameter)
- Oder WHERE ... = IN(:land)?
- Alle drei Lookup Optionen für Parameter funktionieren nur mit Textfeldern (Varchar2 bzw. String), nicht mit Zahlenwerten oder Datumsangaben.
- Gespeicherte Filter nach Ändern von Parametern in der SQL Abfrage löschen.
- Sonst wird u.U. falsch oder gar nicht gefiltert.
1.1 Datum als Parameter
- Wenn aus als Parametern eingegebenen Daten Zeitdifferenzen in Tagen errechnet werden sollen, müssen diese u.U. erst in Integer umgewandelt werden.
- Das funktioniert so nur mit ganzen Tagen. Das Format 'J' gibt nur die Julianische Tageszahl als Integer zurück, nicht die Zeit als Dezimalstelle hinter den Komma.
- Im Beispiel funktioniert so im BI Tool, also im Select ohne Umwandlung, aber Level <= nur mit Umwandlung. Im SQL Developer erzeugt es Fehler.
SELECT :VON - 1 + level AS datum FROM dual CONNECT BY LEVEL <= to_number(to_number(to_char(:BIS ,'J')) - to_number(to_char(:VON ,'J')) +1 )
1.2 Nullwerte
Wir haben im PAT alle möglichen Flags, die NULL, N und J sein können.
Wie kann man das im BI Creator einrichten, dass man dort nur N oder J hat bei einem Flag, auch wenn es bei manchen Einträgen NULL ist (z.B FL_INAKTIV im Kundenstamm, da man ja nach NULL nicht selektieren kann).
So klappt es:
select kndgrp, kndnr, kndkbz, fl_inaktiv, plz, ort, land from b_kndstamm where 1=1 ?and kndgrp = :Kundengruppe ?and land = :land ?and nvl(fl_inaktiv,'N') = :Inaktiv
In meiner DB sind von 39 Kunden einer auf J und einer auf N alle anderen sind NULL.
Wenn ich in meiner Liste nach N selektiere bekomme ich die 38, bei J den einen.
Im select-Teil der Abfrage darf man nicht schon "nvl" verwenden, erst bei den Selektionen.
2 Zwei Felder verknüpfen
Wie können zwei Felder - z.B. Name1, Name2 - miteinander verknüpft werden?
select Name1||' '||Name2 Beide_Namen ....