Quantcast
Channel: QlikView + Qlik Sense Blog von Heldendaten
Viewing all articles
Browse latest Browse all 102

Qlik ETL Script - Kann man diese Datei einlesen?

$
0
0
Vor Kurzem hat uns ein Kunde eine "eigenwillig" formatierte Datei zukommen lassen, mit der Bitte diese in eine Qlik Analyse einzubauen. Jedes BI-Tool kann wohl Excel, .csv oder XML-Daten laden. Aber so simpel war diese Datei leider nicht gestrickt. Dass wir für solche Fällen die Qlik ETL Skriptsprache zur Verfügung zu haben, ist natürlich äußerst dienlich!

Die Datei hatte folgende Struktur

CreationTime   : 16.03.2015 10:21:39
LastWriteTime : 15.11.2014 14:28:45
LastAccessTime : 16.03.2015 10:21:39
Length : 3512312
FullName : \\MyComputer\Pics\P101.JPG

CreationTime : 16.03.2015 10:21:39
LastWriteTime : 15.11.2014 14:28:45
LastAccessTime : 16.03.2015 10:21:39
Length : 2794726
FullName : \\MyComputer\Pics\P104.JPG

CreationTime : 16.03.2015 10:21:40
LastWriteTime : 15.11.2014 14:35:02
LastAccessTime : 16.03.2015 10:21:40
Length : 3151733
FullName : \\MyComputer\Pics\P107.JPG

CreationTime : 16.03.2015 10:21:41
LastWriteTime : 15.11.2014 14:35:02
LastAccessTime : 16.03.2015 10:21:41
Length : 3451760
FullName : \\MyComputer\Pics\P108.JPG.JPG


und sollte in diese Struktur gebracht werden:

Um die Daten in diese tabellarische Form zu bekommen, sind einige Transformationsschritte notwendig.

Feldspalten trennen

Die Tabelle  lässt sich nicht gut anhand eines Trennzeichen teilen, weil das vermeintliche Trennzeichen "Doppelpunkt" zwischen den Wert-Paaren genauso vorkommt wie als Trennzeichen von Stunden, Minuten und Sekunden.

CreationTime   : 16.03.2015 10:21:41

In Qlik kann man stattdessen beim Einlesen der Datei auf die Option "Fix-Record" setzen. Nach 17 Zeichen hätten wir gern eine neue Spalte um Attribut-Felder von Wert-Feldern zu trennen.



Qlik generiert daraus folgendes Skript für die Spalten "Feld" und "Wert"

LOAD [@1:16] as Feld, 
[@17:n] as Wert
FROM
[.\data.txt]
(fix, codepage is 1252);

Daten bereinigen

Für die weitere Transformation  benutzen wir einen Load above Load Befehl. Die Leerzeile die die  Originaldatei nach je 5 Zeilen enthält, laden wir danke len(Feld) > 0 nicht mehr mit. Den Doppelpunkt in der Spalte "Feld" entfernen wir mittels String-Befehl purgechar. Die leading und trailing Spaces, löschen wir mit trim().


DataTemp:
Load
ceil(rowno()/5) as ID,
trim(PurgeChar(Feld,':')) as Feld,
trim(Wert) as Wert
where len (Feld) > 0;
LOAD [@1:16] as Feld,
[@17:n] as Wert
FROM
[.\data.txt]
(fix, codepage is 1252);
 

Nach den bisherigen Transformationsschritten sind Attribute und Werte fein säuberlich getrennt. Sie stehen jedoch weiterhin in mehreren Zeilen untereinander.

Zeilen in Spalten transponieren

Um die fünf zusammengehörigen Attribute nun in eine gemeinsame Zeile mit mehreren Spalte zu transponieren, würde mancher QlikView-Kenner an den Generic-Load denken. Wir machen es hier aber selbst. Der Trick verbirgt sich hinter dem Feld (ceil(rowno)/5) as ID welches wir im vorherigen Skriptabschnitt eingebaut haben. Durch die Division&Aufrunden wissen wir immer welche fünf Zeilen in eine gemeinsame Zeile zusammengejoint werden müssen.

Die For-Schleife übernimmt dann den Join, und liefert uns das finale Ergebnis.



Voilà! Transformation geschafft! Auch wenn die meisten Daten nicht so "gemein" formatiert sind, ist es immer gut zu wissen eine mächtige Skriptsprache zur Verfügung zu haben! Also: Viel Spaß beim Qlik Skript schreiben!

Viewing all articles
Browse latest Browse all 102