QlikView Easter Egg - Das Entwicklungsteam

Bevor sich alle auf die Suche nach ihren Ostereiern begeben, hier noch schnell ein Beitrag über ein schönes Easter Egg im QlikView Developer: Seit der ersten QlikView-Version gibt es in jedem Release ein verstecketes Bild der QlikView-Entwicklungsmannschaft aus Schweden.

Die ganz alten Versionen finden sich leider nicht mehr zum Download, aber folgende Bilder lassen sich seit der Version 7 finden:

Version 7 & 8 - scheinbar das Bild aus Qlikview 6

Version 9 und aufwärts

Der CTO von QlikTech hat sogar einmal erzählt, dass in der ersten QlikView-Version dieses Bild mehr Platz benötigte, als der gesamte eigentliche Programmcode von QlikView ;). Mittlerweile paßt das Entwicklungsteam wohl nicht mehr auf ein einzelnes Foto - sonst wäre eine Aktualisierung in QlikView 11 doch dringend notwendig :)

Wenn Sie es selbst ausprobieren wollen, bauen Sie einfach eine Textbox mit folgenden Code
qmem://<bundled>/DevTeam.jpg
und wählen Sie unter Eigenschaften|Allgemein|Representation den Eintrag Bild! Oder Sie laden sich die Applikation hier herunter! 

In diesem Sinne wünschen wir frohe Ostern und viel Spaß beim Eiersuchen!
Ihr heldendaten Team

PS: Wer übrigens ein Freund des alten Microsoft Office "Clippy"-Büroklammerngehilfen ist, dem sei folgender Blogbeitrag ans Herz gelegt. Auch der findet sich nämlich gut versteckt in Ihrem QlikView Developer.

Stücklisten in QlikView - Recursive SQL

Heute würde ich mich gerne den Themen Stücklisten (oder bill of materials (BOM)) , QlikView und Recursive SQL-Statements widmen. Exemplarisch gehe ich hierbei von einer Stückliste für ein Auto aus:

Wie wir sehen können wird das Material "Schraube" in mehreren Bauteilen benötigt.  Insgesamt gibt es vier Subtrees die verschiedene Mengen an Schrauben benötigen. Um also insgesamt das Auto bauen zu können, benötigt man in unserem Beispiel 96 Schrauben.

Relational sind Stücklisten häufig in einer Parent-Child Struktur abgespeichert, da Stücklisten ja beliebig tiefe Verschachtelungen (Ebenen) haben können.


In QlikView wünscht man sich aber oft eine flache Darstellung mit einer benamten Spalte pro Ebene:


Naheliegend wäre es jetzt den QlikView Hierarchy Load an dieser Stelle einzusetzen. Dieser Befehl wurde in Qlikview 8.5 eingeführt, um zB. rekursive Vertriebshierarchien in die oben gezeigte Darstellung  zu bringen.

Führt man den Hierarchy-Befehl auf das gezeigte Datenset aus, liefert der Befehl  aber leider kein vollständiges Ergebnis. Die Knoten für die Subtrees:

  • Auto - Karosserie - Schraube
  • Auto - Karosserie - Schraube - Schraubenmutter
fehlen im Ergebnis. Entsprechend wäre in einer fertigen Applikation auch die Menge (Qty) für die Schrauben zu niedrig.

Warum ist das der Fall? QlikView's Hierarchy Befehl geht davon aus, dass jeder Knoten genau einen Vorgänger hat. Das klappt gut etwa bei einer Vertriebshierarchie: jeder Vertriebsmitarbeiter hat einen Teamleiter, jeder Teamleiter einen Gebietsleiter, usw. Bei Stücklisten ist der Fall schwieriger: Die Schraube beinhaltet zwar immer eine Schraubenmutter, die Schraube selbst wird aber an den unterschiedlichsten Stellen eingesetzt (Karosserie, Reifen, Zylinderdichtung und beim Auto selbst). Die Schraubenmutter kann auch ohne Schraube eingesetzt werden (im Beispiel direkt beim Auto, bei der Zündkerze).  QlikView scheint zwar noch einige Ebenen zu schaffen, aber irgendwann lässt es einfach Knoten weg. Leider ohne Fehlermeldung. Das Verhalten ist aber nach Nachfrage beim Support "Working as Designed".

Wie kann man nun die Stückliste trotzdem in QlikView einlesen? Der SQL Standard 1999 ist mittlerweile in vielen großen Datenbanksystemen implementiert, und bietet rekursive SQL Funktionen. Wenn man also das Auflösen der Stückliste auf die Datenbank auslagert, kann man die Daten in QlikView einlesen:

with rvaRec (ebene, path, Parent, Child, Quantity,QuantitySubTree,QuantitySubTreeValue) as (
 select 
  1 as ebene, 
  cast('|'+ Child as varchar(1000)) as path, 
  Parent,  
  Child, 
  Quantity, 
  cast(Quantity as varchar(1000)) as QuantitySubTree, 
  CAST(Quantity as float) as QuantitySubTreeValue 
 from [TestRVA].[dbo].[Stueckliste] where Parent is null
 union all
 (
 select 
  ebene+1 as ebene, 
  cast(path+'|'+c.Child as varchar(1000)) as path, 
  c.Parent as Parent, 
  c.Child as Child, 
  c.Quantity as Quantity, 
  cast(QuantitySubTree+'|'+cast(c.[Quantity] as varchar(50)) as varchar(1000)) as QuantitySubTree, 
  CAST(QuantitySubTreeValue*c.[Quantity] as float) as QuantitySubTreeValue  
 from rvaRec p, [TestRVA].[dbo].[Stueckliste] c
 WHERE p.Child=c.Parent
 )
)
select ebene, path, Parent,Child, Quantity,QuantitySubTreeValue,QuantitySubTree from rvaRec order by ebene,path;


Das Statement oberhalb liefert das Ergebnis für die Auto-Stückliste. Das Feld path zeigt durch das Trennzeichen '|' getrennt die flache Darstellung der Stückliste an. Stellt man das Ergebnis des QlikView Hierarchy-Load und des rekursiven SQL Statements gegenüber, so sieht man, dass das SQL-Statement die  zwei Subtrees:

  • Auto - Karosserie - Schraube
  • Auto - Karosserie - Schraube - Schraubenmutter
 korrekterweise im Ergebnis anzeigt.



Mit diesem Ergebnis kann nun in QlikView weitergearbeitet werden. Das Feld path ist zwar noch nicht optimal um es in Qlikview zu benutzen - für die Darstellung am Frontend soll das Feld path in die einzelnen Ebenen (== Spalten) zerteilt werden - aber da kann man sich mit QlikView Boardmitteln helfen.

Um ein Feld in QlikView zu zerteilen, gibt es den selten genutzten Load From_Field Befehl:

load
*
From_Field(Tablename,path)
(txt,utf8,explicit labels,delimiter is '|', msq);
Mit dem Parameter delimiter is '|' gibt man das Trennzeichen des bereits geladenen Feld path an. Für jede Ebene generiert QlikView nun ein Feld in der Syntax @Ebene (also @1, @2, @3, usw). Um zum endgültigen Ergebnis in QlikView zu kommen muss man also entsprechend die generierten Felder sinnvoll umbenennen und zu einer Tabelle zu joinen (ähnlich dem Generic-Load).

Die fertige Applikation sieht dann wiefolgt aus: die Felder Nodename1 bis Nodename7 entsprechen dem Feld path aufgesplittet nach dem Trennzeichen. Als korrekte Quantity für das Material "SCHRAUBE" wird in der Pivottabelle 96 angezeigt. Die Pivottabelle zeigt die Baumdarstellung mit ausmultiplizierten Mengen!


 Ein komplettes Skriptbeispiel, sowie ein Beispiel für die Limitation des Hierarchy-Loads finden Sie hier!



Mindmap - How to become a QlikView Script Expert

Nach dem Mindmap für QlikView Designer vor einigen Wochen, hier das Mindmap zum Thema "How to become a QlikView Script Expert".


Der Entwickler von QlikView Datenmodellen legt den Grundstein für eine wartbare und performante QlikView Applikation: vom Anzapfen der Datenquellen, über das saubere Aufbauen von Tabellenverbindungen (mit Hilfe einer Vielzahl von mehr oder weniger komplexen Skriptbefehlen) bis hin zur Pflege der Dokumentation und der Metadaten. Hat der Entwickler dem Designer ein korrektes und und sauberes Datenmodell geliefert, macht er sich weiters häufig Gedanken über Security, Clients und Performance.

Das Mindmap fasst die Punkte unter folgenden Themen zusammen:
  • Applikation Development
  • Data Connections
  • Security
  • Common Complex Script
  • Clients
  • Metadaten
  • Licensing
  • Doku
  • Exotic Complex Script
Der Screenshot kann leider nicht mehr alle Punkte zeigen. Hier finden Sie wieder das .pdf! Bei Interesse am XMind-File, schicken Sie mir am Besten eine kurze Nachricht.

Scharfe QlikView Bilder in Excel einfügen

QlikView Charts als Bilder nach Excel exportieren - da wirken die Charts immer irgendwie unscharf. Dachte ich mir auch, bis ich vor kurzen in einem anderen Zusammenhang über folgendes Office-"Feature" gestolpert bin: Rechtsklick "Inhalte einfügen|Bitmap" stellt das QlikView Bild in Excel scharf dar.

Ein Chart kopiert man in QlikView mittels Rechtsklick|In die Zwischenablage kopieren|Bild in die Zwischenablage. Sagt man jetzt Einfügen (STRG+V) in Excel, dann wirkt das QlikView Chart - vor allem die Schrift - unscharf!



Macht man aber stattdessen einen Rechtsklick|Inhalte Einfügen erscheint in Excel ein weiterer Dialog "Inhalte Einfügen". In diesem Dialog kann man den Eintrag "Bitmap" auswählen um das QlikView Chart einzufügen.





Der direkte Vergleich: Oben verschwommen mit "normalen Einfügen". Unten mit "Inhalte Einfügen" als scharfes Balkendiagramm.




Soviel zu statischen Export von QlikView Bildern. Die Live-Integration von QlikView in Excel Produkte mittels OCX steht natürlich ebenfalls zur Verfügung. Hier ein kurzes HowTo-Video das ich zu dem Thema erstellt habe.





heldendaten GmbH,2017