Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Q&A with Qlik - Qlik Cloud Migration: Questions about migrating to Qlik Cloud? Catch the latest replay!
cancel
Showing results for 
Search instead for 
Did you mean: 
D4rkSp4ce
Contributor
Contributor

Erstellung von Mapping Tabellen

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

Labels (1)
1 Solution

Accepted Solutions
marcus_sommer
MVP
MVP

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.

View solution in original post

4 Replies
hic
Former Employee
Former Employee

Ich würde versuchen dasselbe Skript zu verwenden, aber ohne Keep im zweiten Mapping-Load.

D4rkSp4ce
Contributor
Contributor
Author

I tried this already. The keep was my try to fix it.
marcus_sommer
MVP
MVP

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.

D4rkSp4ce
Contributor
Contributor
Author

Sorry, für die späte Antwort. Aber danke. Jetzt klappt es. 😉 Bin Happy. Danke