Felder aus Feld laden - Load XML mit FROM FIELD

Der LOAD-Befehl kennt viele Quellen aus denen er sich befüttern lässt: OLEBC/ODBC-Datenquellen, .csv-Dateien, SAP, QVSource. Gerade eben habe ich mir den QVX-Connector von Rapidminer angesehen - nur um eine kleine Auswahl anzuführen.

Einen  weiteren LOAD-Befehl gibt es zwar laut Dokumentation, er ist aber in der freien Wildbahn  höchst selten anzutreffen:

LOAD FROM FIELD

Die Idee: ich habe ein Feld bereits geladen, möchte aber dessen Inhalt nochmals als Datenstruktur weiterverarbeiten. Wieso möchte ich das? Nach einigen Jahren ist mir das erste Mal ein sinnvolles Beispiel untergekommen: Ein Vorsystem liefert uns eine .csv-Datei,  in der das Feld "Data" weitere Informationen als XML-Struktur enthält.



Ladet man das Feld "Data" ohne weitere Transformation, ist es nur bedingt nützlich.

Das Feld "Data" enthält nur einen langen XML-String

Ziel ist es, die einzelnen XML-Tags und Attribute wie  PNR, Name und ID aus dem Feld "Data" zur Analyse bereitzustellen. Genau hier kommt FROM FIELD zu Tragen.

Table:
LOAD 
  rowno() as rowid,
  Department,
  Data
FROM
[.\text.csv]
(txt, codepage is 1252, embedded labels, delimiter is '|', msq);



//Loop and Table "Helper" with just a single row is necessary, 
//otherwise the "From Field" fails in QV11.20SR10. 
//Bug accepted by Qlik Support.
for i = 1 to (NoOfRows('Table'))

 Helper:
 load
   Data as XmlField
 resident Table where rowid=$(i);
 


 //Trick: rowno() so we can join with the original Table 
        //to retrieve "Department" field
 XMLResult:
 load
   $(i) as rowid,
   [PNR], //access xml Tag
   [Name],
   [Id] //access xml Attribute
 From_Field (Helper,XmlField)
 (xmlSimple, table is [Info/Data]);
 
 drop table Helper;

next

Das Listing ist nicht ganz trivial, aber das Ergebnis erfolgreich: Aus meinen drei Inputzeilen werden vier Mitarbeiter generiert. Der Verweis zurück zu meinem "Department" funktioniert über den Trick mit rowno(). Im Screenshot unterhalb sieht man, dass die Person "RVA" dem "Sales"-Department zugeordnet ist.



Unterhalb einige Notizen zum Skript:
  • Zeile 1: Die .csv-Datei ganz normal laden. In diesem Fall hat sie eine '|' als Trennzeichen
  • Zeile 15: Der FROM FIELD -Load  funktioniert momentan nur wenn man einzelne Zeilen liest. Deswegen müssen wir hier in einer Schleife über die Tabelle iterieren. Das ist nicht furchtbar schnell, aber momentan als Workaround notwendig. Das Problem ist beim Qlik Support eingekippt. Ich melde mich, sobald es in einem Service Release gefixt wurde.
  • Zeile 32: Hier kommt das FROM FIELD zum Einsatz. Das bereits geladene Datenfeld Data wird hier nochmals als XML geladen --> hier werden die XML-Infos. ID, NAME,PNR aus dem XML geholt.

Eine QlikView .qvw, eine Qlik Sense.qvf und die Inputdatei zum Ausprobieren finden Sie hier.



0 Response to "Felder aus Feld laden - Load XML mit FROM FIELD"

Kommentar veröffentlichen

heldendaten GmbH,2017