Hej Leute,

hier kommt mein erstes QlikView-Tutorial für Euch. Bei meiner Arbeit als Data Scientist für die Schön Kliniken benutze ich QlikView nun seit 2,5 Jahren für die verschiedensten Dashboards und Anwendungen. Das reicht von einfachen Kontroll-Charts, die die Ladekette überwachen, bis hin zu komplexen Anwendungen für den Endnutzer, welche sich generisch über Steuertabellen konfigurieren lassen, so dass sie sich die entsprechenden Daten holen und passende Dashboards dazu darstellen.

In Teil 1 von diesem Tutorial geht es um das Ladeskript, also wie bekommt man die Daten aus den Datenquellen nach QlikView. In Teil 2 des QlikView-Tutorials für Einsteiger machen wir uns dann an die Datenvisualisierung bzw. das Dashboard. Ich habe alles Schritt für Schritt erklärt, also sollte jeder eigentlich mitkommen. Sonst schreibt mir einfach, wo ihr Probleme habt.

 

QlikView herunterladen und installieren

Ok, der erste Schritt gestaltet sich schon als nicht ganz einfach. Qliktech hat die Download-Seite für die kostenlose QlikView Personal Edition etwas versteckt, aber mit etwas Suche findet man sie (oder klickt auf meinen Link). Die Personal Edition hat die Einschränkung, dass man nur eigene QlikView-Applikationen öffnen kann. Also mal eben ein schönes Beispiel aus dem Internet ansehen oder mit anderen Leuten teilen, die auch nur die Personal Edition haben, geht leider nicht.

Ok,zurück zum Download. Leider dann noch viele persönliche Daten eingeben, naja, kommt man wohl nicht drum herum. Und schon kann die Software installiert werden. Die Installation ist easy und einfach immer auf weiter klicken führt einen durch.

 

Erste Schritte – das Filmbeispiel

Als Beispiel-Anwendung hat QlikTech eine Filmdatenbank in QlikView geladen und eine kleine Oberfläche dazu gebastelt. Schaut einfach selber rein und klickt euch durch.

 

Jetzt wollen wir aber selber laufen lernen und eigene Anwendungen entwickeln …

 

QlikView-Tutorial: Neugeborenen-Vornamen in Bonn

 

Daten

Zuerst brauchen wir Daten. Dafür habe ich mal in den Datensätzen von Bonn: Offene Daten gestöbert und bin auf die Daten zu den Vornamen von Neugeborenen von 2010 bis 2017 gestoßen. Diese gibt es jahresweise als csv- oder json-, z.T. auch als xls-Datei, zum Herunterladen. Für QlikView bieten sich die csv-Dateien an. Komischerweise gibt es die 2014-Daten nicht als csv, sondern nur als Excel. Prinzipiell wäre das kein Problem, da QlikView natürlich beide Formate einlesen. Aber ich habe meine Daten gerne ordentlich für eventuell spätere Verwendung. Also schnell in Excel geöffnet und als csv abgespeichert.

 

Das QlikView-Ladeskript

QlikView hat, grob gesagt, zwei Bereiche. Zum einen das Ladeskript, welches für den Import der Daten sorgt und bei jeder Aktualisierung durchläuft. Zum anderen die grafische Oberfläche. Die Skriptsprache ist relativ intuitiv, wenn sie auch ihre Eigenarten hat, und kann eine ganze Menge. Für die komfortable Bedienung gibt es Assistenten, welche Euch beim Einlesen der Datenquellen unterstützen.

 

Ok, zuerst erstellen wir eine neue Datei (Überraschung, Datei -> Neu) und speichern diese direkt ab. Das Speichern ist wichtig, damit beim Einlesen der Daten die Pfade richtig gesetzt werden. Die Endung von QlikView-Applikationen ist qvw.

 

Nun öffnen wir das Ladeskript durch Klick auf den entsprechenden Button (Shortcut STRG + E).

Dort gibt es schon einige Einträge, die uns aber erstmal nicht groß interessieren müssen. Es werden nur die Standardformate für Deutschland gesetzt.

Das Ladeskript kann man der Übersicht halber in verschiedene Tabs auftrennen, die nacheinander ausgeführt werden.

 

Csv-Dateien einlesen

Wir erstellen also ein neues Registerblatt (Registerblatt -> Neues Registerblatt) und geben ihm den Namen „Einlesen“. Ich empfehle, noch die Checkbox Relative Pfade anzuklicken. Diese sorgt dafür, dass eben nicht der absolute Laufwerkpfad verwendet wird, sondern eben der zum Speicherort der qvw relative.

Jetzt nutzen wir den Assistenten, indem wir auf Tabelle klicken. Dort wählt ihr alle Vornamen-Dateien aus, im nächsten Fenster noch sagen, dass der Spaltennamen mitgeliefert wird und dann auf Fertig klicken. Das macht ihr jetzt für jede der Dateien.

Fertig ist das erste Ladeskript und ihr könnt es mit Skript ausführen auch direkt mal laufen lassen.

Achtung: Bitte immer abspeichern, bevor ihr ein Skript laufen lasst. Sind Fehler in dem Skript, kann man nur so einem Verlust der Arbeit seit dem letzten Speichern entgehen.

 

Nachdem das Skript durchgelaufen ist, gehen wir in die Tabellenstruktur-Ansicht. Im Skripteditor der zweite Button von rechts oder per Shortcut Strg+T (für den Shortcut müsst ihr nicht extra in den Skripteditor).

Hier sehen wir schon, dass etwas nicht ganz so ist, wie es sein sollte. QlikView hat also eine Tabelle „Vornamen 2010“ und eine Tabelle „Vornamen 2017“ angelegt und diese mittels einer Zwischentabelle Syn$1 verknüpft. Zu synthetischen Keys gibt es eine ganze Menge zu sagen, das würde aber das Tutorial hier sprengen. Nur soviel: In den meisten Fällen sind synthetische Tables nicht gewünscht.

Aber was ist eigentlich passiert. Da die csv-Dateien von 2010 bis 2016 genau gleich aufgebaut sind, packt er diese alle in eine Tabelle und da wir mit 2010 angefangen haben und nicht extra benannt haben, heißt sie eben wie die Datei. In 2017 ändert sich die Datenstruktur der csv-Datei. Es kommt noch die Spalte position dazu, die angibt, ob der Vorname an erster, zweiter, … Stelle vorkommt.

 

Ladeskript reparieren

Zuerst geben wir der ersten Tabelle den Namen „Vornamen“. Dann modifizieren wir noch das Einlesen der 2017-Daten, indem wir position auskommentieren, aber das Einlesen nur auf die Namen beschränken, die an erster Stelle vorkommen (also position=1). Das macht man wie in SQL mit einem where

 

LOAD 
  vorname
 ,anzahl
 ,geschlecht
 // ,position 
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2017.csv] 
(txt, utf8, embedded labels, delimiter is ';', msq) 
where position=1;

 

Jetzt können wir das Skript laufen lassen und es wird alles schön in eine Tabelle geschrieben. Aber Moment, wir haben etwas vergessen. Es gibt nur die Felder vorname, anzahl und geschlecht, aber keine Jahreszahl. Die ergänzen wir jetzt noch, in dem wir das hart in jeden load-Befehl einfügen.

 

Es geht natürlich auch eleganter, indem wir eine Schleife über alle Dateien bauen, aber das ist etwas für ein nächstes Tutorial.

 

Damit wir später in der Anzeige nicht jedesmal den Feldnamen für die Ansicht anpassen müssen (von kleinem auf großen Anfangsbuchstaben), nennen wir am Ende vom Skript noch schnell die Felder mittels RENAME FIELD um.

RENAME FIELD vorname TO Vorname;

 

 

Die fertige Tabellenstruktur (Shortcut Strg+T nicht vergessen) sieht dann so aus. Das komplette Ladeskript gibt es am Ende.

 

 

Und das war Teil 1 des Tutorials. Daran denken, erst dafür sorgen, dass das Ladeskript soweit wie möglich aufgebaut ist und sauber durchläuft. Dann geht es an die Visualisierung in Teil 2 des QlikView-Tutorials für Einsteiger.

 

Happy Qliking,

Euer Holger

 

Das fertige Ladeskript

Hier gibt es das (fast) komplette Ladeskript. Die Standardeinstellungen aus dem ersten Tab habe ich nicht reinkopiert. Beim Kopieren müsst ihr noch die Pfade anpassen.

Vornamen:
LOAD
   vorname
  ,anzahl
  ,geschlecht
  ,2010 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2010.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

LOAD
   vorname
  ,anzahl
  ,geschlecht
  ,2011 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2011.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

LOAD
   vorname
  ,anzahl
  ,geschlecht
  ,2012 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2012.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

LOAD
   vorname
  ,anzahl
  ,geschlecht
  ,2013 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2013.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

LOAD
   vorname
  ,anzahl
  ,geschlecht
  ,2014 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2014.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

LOAD
   vorname
  ,anzahl
  ,geschlecht
  ,2015 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2015.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

LOAD
   vorname
  ,anzahl
  ,geschlecht
  ,2016 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2016.csv]
(txt, utf8, embedded labels, delimiter is ';', msq);

LOAD
   vorname
  ,anzahl
  ,geschlecht
// ,position
  ,2017 as Jahr
FROM [..\..\Daten\Vornamen Bonn\Vornamen 2017.csv]
(txt, utf8, embedded labels, delimiter is ';', msq)
where position=1;

RENAME FIELD vorname TO Vorname;
RENAME FIELD anzahl TO Anzahl;
RENAME FIELD geschlecht TO Geschlecht;