Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hallo zusammen,
ich habe derzeit mit eine Tabelle zusammengebaut, welche drei Werte aus Mappingtabellen holt. Zwei davon funktionieren einwandfrei
Aber an dieser Stelle hier, wo ich eine Tabelle als Grundlage habe und daraus zwei Mappingtabellen mache habe ich das Problem, dass die zweite nicht mehr richtig gemappt wird, bzw. keine Werte enthält. Wenn ich die Reihenfolge tausche, ist immer die zweite "leer".
Was mache ich falsch?
[SCHADENZAHLUNGEN]:
Keep Load
'$(vAuswertungsdatum)' & OPVPRODUKT_VPK_ID as KEY,
BETRAG_BT,
COUNTER,
OPVPRODUKT_VPK_ID as VPROD
Resident rohdaten_fuer_schadenszahlungen
Where (BUCHDATUM_DT <= '$(vAuswertungsdatum)');
TABELLE_GESAMT_FUER_SCHADENSUMME:
Mapping Load
KEY,
Round(Sum(BETRAG_BT),0.01) as SCHADENSBETRAG
Resident SCHADENZAHLUNGEN
Group By KEY;
TABELLE_GESAMT_FUER_SCHADENANZAHL:
Mapping Keep Load
KEY,
Sum(COUNTER) as SCHADENSANZAHL
Resident SCHADENZAHLUNGEN
Group By KEY;
Und so füge ich es dann ein:
ApplyMap('TABELLE_GESAMT_FUER_SCHADENSUMME', '$(vAuswertungsdatum)' & Vertragsproduktnr, null()) as SCHADENSUMME,
ApplyMap('TABELLE_GESAMT_FUER_SCHADENANZAHL', '$(vAuswertungsdatum)' & Vertragsproduktnr, null()) as SCHADENANZAHL
Aber irgendwie habe ich es noch nicht verstanden, wann Qlik eine neue Tabelle erstellt und andere Tabellen einfach verändert. Wenn super wenn hier jemand eine Idee hätte.
Gruß D4rki
Ein Mapping-Load erzeugt (eigentlich) immer eine separate Tabelle, die nicht mit anderen Tabellen/Loads zusammengefasst wird und keine anderen Tabellen verändert oder selbst von weiteren Loads verändert wird. Ausnahmen sind denkbar/möglich, aber für die normalen Szenarien nicht empfehlenswert.
So gesehen, sollte das Vorgehen (abgesehen vom erwähnten keep) schon funktionieren und ich glaube auch nicht, dass die Mapping-Tabellen Leer sind. Das lässt sich sehr einfach überprüfen, indem man diese ohne Mapping-Prefix und per Qualify parallel mit lädt, z.B.:
qualify *;
MeinLoadStatement;
unqualify *;
Den jeweiligen lange Tabellen-Namen ersetze mal durch x und y, um die Felder-Sichten in den Objekten übersichtlicher zu halten.
Abgesehen hiervon prüfe mal, ob die zu aggregierenden Felder auch numerisch sind und man somit sum() verwenden kann. Zudem empfehle ich einen Delimiter zwischen die Felder des Keys zu setzen, wie:
Feld1 & '|' Feld2 as Lookup
denn gerade bei der Kombination von numerischen Feldern kann es sonst schnell zu Überlappungen kommen.
Alternativ zu dem obigen, kann man auch multiple Felder über ein einzelnes Mapping zurückgeben, einfach indem man die Return-Felder ebenfalls mit einem Delimiter verkettet und dann den applymap() Call in ein subfield() einbettet, aus dem man dann den jeweiligen Sub-String rauspickt. Gerade bei vielen Feldern und/oder großen Mapping-Tabellen und/oder Performance-Intensive, wie bei den Aggregationen, kann man hiermit mehr Übersichtlichkeit, weniger Ressourcen-Belastungen und kürzere Laufzeiten erreichen.
Ich würde versuchen dasselbe Skript zu verwenden, aber ohne Keep im zweiten Mapping-Load.
Ein Mapping-Load erzeugt (eigentlich) immer eine separate Tabelle, die nicht mit anderen Tabellen/Loads zusammengefasst wird und keine anderen Tabellen verändert oder selbst von weiteren Loads verändert wird. Ausnahmen sind denkbar/möglich, aber für die normalen Szenarien nicht empfehlenswert.
So gesehen, sollte das Vorgehen (abgesehen vom erwähnten keep) schon funktionieren und ich glaube auch nicht, dass die Mapping-Tabellen Leer sind. Das lässt sich sehr einfach überprüfen, indem man diese ohne Mapping-Prefix und per Qualify parallel mit lädt, z.B.:
qualify *;
MeinLoadStatement;
unqualify *;
Den jeweiligen lange Tabellen-Namen ersetze mal durch x und y, um die Felder-Sichten in den Objekten übersichtlicher zu halten.
Abgesehen hiervon prüfe mal, ob die zu aggregierenden Felder auch numerisch sind und man somit sum() verwenden kann. Zudem empfehle ich einen Delimiter zwischen die Felder des Keys zu setzen, wie:
Feld1 & '|' Feld2 as Lookup
denn gerade bei der Kombination von numerischen Feldern kann es sonst schnell zu Überlappungen kommen.
Alternativ zu dem obigen, kann man auch multiple Felder über ein einzelnes Mapping zurückgeben, einfach indem man die Return-Felder ebenfalls mit einem Delimiter verkettet und dann den applymap() Call in ein subfield() einbettet, aus dem man dann den jeweiligen Sub-String rauspickt. Gerade bei vielen Feldern und/oder großen Mapping-Tabellen und/oder Performance-Intensive, wie bei den Aggregationen, kann man hiermit mehr Übersichtlichkeit, weniger Ressourcen-Belastungen und kürzere Laufzeiten erreichen.
Sorry, für die späte Antwort. Aber danke. Jetzt klappt es. 😉 Bin Happy. Danke