PAT Enterprise.Information System.Abfragen: Unterschied zwischen den Versionen
Schild (Diskussion | Beiträge) |
Schild (Diskussion | Beiträge) |
||
(45 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | [[ | + | {{DISPLAYTITLE:BI Abfragen}} |
− | == | + | SQL Profis erfahren hier, wie sie die Abfragen im BI Designer ändern und die Filter bearbeiten können. |
+ | |||
+ | Das Anpassen der Ausgabe als Tabellen, Reports oder Dashboard wird [[PAT_Enterprise.Information_System|hier]] beschrieben. | ||
+ | |||
+ | = 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. | * Gespeicherte Filter nach '''Ändern von Parametern''' in der SQL Abfrage löschen. | ||
** Sonst wird u.U. falsch oder gar nicht gefiltert. | ** Sonst wird u.U. falsch oder gar nicht gefiltert. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | == 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. | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | * Beispiel | ||
<pre> | <pre> | ||
− | + | 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 ) | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | == 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: | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | 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. | ||
− | = | + | = Zwei Felder verknüpfen = |
− | + | Wie können zwei Felder - z.B. Name1, Name2 - miteinander verknüpft werden? | |
− | |||
− | |||
− | |||
− | |||
+ | ''select Name1||' '||Name2 Beide_Namen ....'' | ||
− | == | + | = Weiterführende Links = |
− | + | *[https://wiki.cds.co.at/wikipat/index.php?title=CUSTOMER:PAT_Enterprise_En_BI_Creator CDS Wiki zum BI Creator (englisch)] | |
− | + | *[[BI-Creator_Beschreibung| Deutsche Übersetzung der CDS Wiki-Seite]] | |
− | *[https://wiki.cds.co.at/wikipat/index.php?title=CUSTOMER:PAT_Enterprise_En_BI_Creator BI Creator (CDS |
Aktuelle Version vom 25. Mai 2022, 13:11 Uhr
SQL Profis erfahren hier, wie sie die Abfragen im BI Designer ändern und die Filter bearbeiten können.
Das Anpassen der Ausgabe als Tabellen, Reports oder Dashboard wird hier beschrieben.
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 ....