From IFrame to API - using the Qlik Sense Platform

Einige Tage nachdem Qlik Ihren Chatbot vorgestellt hat, habe ich Ende Juni einen Vortrag bei der Qlik Dev Group Austria geben dürfen, um die Grundlagen hinter einer solchen Qlik Sense Integration ein wenig zu erklären!

HIC @ Dev Group inVienna
Qlik Sense große Stärke im Hintergrund ist die Vielzahl an APIs um Qlik zu erweitern, bzw. in andere Produkte einzubinden oder gar ganz neue Clients zu schaffen. Siehe Sense Excel oder eben den Chatbot.  Während sich die meisten Leute auf Extensions konzentrieren, sind die Ansätze bei denen man  programmatisch auf die Qlik Sense Engine zugreift, eigentlich die interessanteren. Die Qlik Engine ist der Datenlieferant den man beliebige "Fragen" mittels "Hypercubes" stellt. Um das Medium der Präsentation kümmert sicher der Entwickler selbst je nach Anwendungsfall - sei es eine einfache Email bis hin zu einem komplett eigenem Client.

Wer sich für die Präsentation interessiert, findet diese unter: http://content.heldendaten.eu/IFrameToAPI.zip . Einfach bei folgender Folie im PDF auf die Bilder klicken, um Beispiel für die einzelnen Integrationsmöglichkeiten zu sehen. Von der ersten Spalte zur zweiten Spalte werden die Integrationen immer komplexer, aber auch mächtiger!
 

PDF herunterladen und Beispiele ansehen.

Will man Qlik Sense für diese Integrationen nutzen, so nennt das Qlik selbst die "Qlik Analytic Platform". Das sorgt immer mal wieder für Verwirrung, ob es sich dabei denn um ein eigenständiges Software-Produkt handelt. Nein, tut es nicht! Leider ist hier die Hilfe mangels Screenshots auch nicht sehr aufschlussreich!


Qlik Analytic Platform ist genau das gleiche Qlik Sense Setup Executable, welches man auch für jede "normale" On-Premise Installationen nutzt. Erst die Lizenz macht den Unterschied: die Qlik Analytic Platform lässt in QMC bei den Engine-Settings einen neuen Reiter "Capacity-based licensing" erscheinen. Dort weist man die Anzahl der CPUs zu, die die jeweilige Engine nutzen soll. Im Gegensatz zu einer "normalen" Qlik Sense Installation, nutzt man hier ausschließlich den Qlik Dev-Hub um seine Integrationen zu implementieren!



Qlik Analytic Platform - nachdem man die Lizenz zugewiesen hat


QlikView Multidimensionales Kombichart austricksen!

Während alle auf das Qlik Sense June 2017 Release schauen, hier ein kleines Problem, welches vielleicht genauso alt wie QlikView selbst ist:

In einem Kombidiagramm mit zwei Dimensionen zum Beispiel "Jahr" und "Bestimmungsland" will ich zwei Expressions auftragen: einmal die durchschnittlichen Frachtkosten als Balken, und darüber die maximalen Frachtkosten als Punkt!

Das sieht in QlikView 12 leider genauso aus wie in QlikView 11 und vielen Versionen davor:

Zentrierte Punte? Warum das?
Die Punkte von max(Frachtkosten) werden alle über den mittleren Balken gesetzt. Jetzt kann man dann raten welches Land zu welchem Punkt gehört :-(

Der Versuch die Sache mit Errorbars zu lösen, scheitert in diesem Fall leider ebenfalls. Zudem verhält sich QlikView 11.20 hier anders als QlikView 12.10 SR6, also besser nicht nutzen!  Was bleibt, ist eine Lösung via "Bar Offset", der sonst für Wasserfalldiagramm benutzt wird. Punkte sind es leider keine, aber man sieht pro Land die maximalen Frachtkosten!

Bar Offset statt Punkten

Entscheidend ist, die eigentliche Kennzahl als "Bar Offset" zu definieren ...


.. und der Expression selbst nur einen Dummy-Wert (als Höhe des Balkens) zu setzen


Weil der Tooltip dann aber irreführend wäre, diesen auch noch explizit als dritte Expression definieren, und den default Tooltip unter "Presentation"-"PopUp" Labels deaktivieren.



Voila - Problem gelöst. Jetzt können wir uns dem Qlik Sense Release zuwenden! Ups, dort geht die Darstellung gar nicht? Ein Kombi-Diagram kann nur eine Dimension? Naja, vielleicht gibt es mal einen Blogpost über das Extension Programmieren!

Download der .qvw gibt es hier!



QlikView Server - Das Gerücht vom Memoryleak und wie man den Cache zurücksetzt

Über das Memory & Cache-Verhalten des QlikView Servers wurde schon viel geschrieben. Trotzdem bleibt das Gerücht hartnäckig, dass der QlikView Server ein Memory Leak hat.



Wenn man sich jedoch einmal mit dem WorkingSetLimit-Setting in der QMC beschäftigt hat, wird einem  klar, dass der QlikView Server einfach gerne aggressiv cached. (Fast) jedes gerechnete "Chart", welches sich aus einer Userselektion ergibt, will der QlikView Server cachen, sofern er noch Memory (<= WorkingSetLimit Low) dafür zur Verfügung hat. Damit braucht ein QlikView Server immer weniger CPU-Zeit, "frisst" aber für gewöhnlich im Verlaufe eines Tages das Memory des Servers auf (und gibt es auch nicht mehr frei, sofern er das WorkingSetLimit Low getroffen hat).

Dieses Verhalt kann nerven - speziell wenn man am gleichen Server auch noch den Publisher/ServerReload laufen hat, und jemand zusätzlich mit dem QlikView Developer entwickelt. Dieses Deployment trifft auf  viele Testserver bei unseren Kunden zu!

Abhilfe kann ein Easteregg schaffen, das in der settings.ini des QlikView Servers gesetzt werden kann.

ClearCacheTimesPerDay=1

Das Setting löscht um Mitternacht den Cache des QlikView Server Services. Das bedeutet:
  •  Memory das von den Daten der .qvws belegt wird, bleibt belegt
  • Alle  gecachten Berechnungen werden gelöscht, und der QlikView Server gibt diesen Teil des Memorys wieder an das Betriebssystem frei.

Das Interessante an diesem Setting: man kann definieren wie oft der Cache geleert werden soll. Immer ausgehend von Mitternacht ergibt sich somit:

ClearCacheTimesPerDay=1Einmal am Tag um Mitternacht 00:00
ClearCacheTimesPerDay=200:00 und 12:00
ClearCacheTimesPerDay=300:00 08:00 16:00
...usw.
ClearCacheTimesPerDay=24jede Stunde 


Die Teststellung

Wir haben ClearCacheTimesPerDay=24 auf einer Teststellung bei uns überprüft.Und tatsächlich - zu jeder vollen Stunde wurde wieder das Memory des Caches freigegeben! Unterhalb unsere Vorgehensweise.

Server

Wir haben auf einem Win2016 Server mit 8GB RAM getestet. Das Workingset des Serves ist auf  50% beschränkt, damit sollte der QlikView Server Prozess bis maximal 4GB Daten cachen.

Workingset des QlikView Server Service auf 50% = 4GB

Das Testscript

Die .qvw für den Test ist recht simple. Das Script lautet:

load
  'A'&rowno() as row,
  rand() as value
autogenerate(1000000)

Im Layout gibt es eine einfache Tabelle. Wenn man einige Werte auswählt und dann Rechtsklick "Select excluded" wählt, füllt man mit jeder neuen Selektion den Server-Cache mit einigen Dutzend Megabytes.

Viele distinkte Daten füllen den Cache ganz gut!


Konfiguration & Test

  1. QlikView Server Service stoppen. Settings.ini ändern, Service starten
  2. Bis 09:43 haben wir den Cache des Servers durch "Klicken" in unserer Testapplikation  auf  2 Gigabyte hochgetrieben
  3. Um 10:00 sieht man im Performance Monitor eine steile Flanke nach oben. Memory wird also freigegeben!  Die Größe des QlikView Server Prozesses ist im Taskmanager auf 192 Megabyte gefallen! Das Setting hat also 1,98 GB Cache geleert! Die restlichen 192 MB sind die Daten in unserer Testapplikation plus ein wenig Overhead des QlikView Server Prozesses.
  4. Gleiches Spiel bis 10:40, nur dass wir mehr Zeilen im autogenerate()-Script der .qvw generiert haben  (ca 900 MB Daten im Memory). Damit füllt sich mehr Cache mit weniger Klick ;-)

    Diesmal haben wir den Cache bis an das Maximum von 4 Gigabytes hochgetrieben (wegen des definierten Workingset Low 50% von 8GB geht auch nicht mehr).

  5. Um 11:00 dann wieder der Drop auf 900 MB

Conclusio

Das Setting ClearCacheTimesPerDay funktioniert, und ist eleganter als ein net stop/start des QlikViewServer Services (bei dem alle Online-User aus ihrer QlikView Session fliegen). Für den Testserver kann es also sehr nützlich sein. Für den Produktiven Server ist es nicht zu empfehlen - da muss man schon ein sinnvolles HardwareSizing durchführen (gerne auch mit uns!).





Qlik Sense Calendar Measures & "Minicharts" in Tabellen


Unsere Kunden fragen häufiger, ob sie in Qlik Sense Tabellen auch Graphiken (Ampeln, Bars, Sparklines) darstellen können. Die Qlik verweist dann gerne auf Extensions, womit wir jedoch gemischte Erfahrungen gemacht haben (kein Support, Limitierung auf bestimmte Qlik Sense Versionen, Paging nicht sauber implementiert, etc.).


Nehmen wir die neuen "Calendar Measures" in Qlik Sense 3.2 zum Anlass, um zu sehen was man mit den Boardmitteln der aktuellen Qlik Sense Objekte erreichen kann!
 
Qlik Sense "Mini Diagramme" und Sparklines - mit Boardmitteln. Ist das möglich?

Calendar Measures

Mit Qlik Sense 3.2 sind Calendar Measures als neues Feature hinzugekommen. Sie verbinden einige Features die in voherigen Qlik Sense Versionen enthalten waren (Declare Statement für Kalender, Datamanger automatische Datumserkennung) mit einem Feature, welches wir schon lange kennen: Set Analysis!

Laut Doku muss man sich den Kalender über den Datamanager generieren lassen. Dieser erzeugt das Declare Statement im Script.

Qlik Sense Datamanager Date
Datamanager erkennt Bestelldatum als Datum und generiert Kalender

Das Measure, welches ein Calender Measure werden soll, rechtsklicken und "Kalenderkennzahlen erstellen"wählen.

Qlik Sense Calendar Measure Create
Neuer Menüpunkt

Es erscheint der neue Dialog bei dem man "mehrmals" die Zeitraum-Dropbox klicken kann um alle Masteritems zu genieren.  In der Vorschau sieht man bereits: Im Grunde werden Set Analysis Expressions am Declare-Kalender erzeugt.

Qlik Sense Calendar Measure Dialog
Calendar Measure Dialog

Alles im allem ist dieses Qlik Sense 3.2 Feature "ganz OK". Aber wer heute schon seinen eigenen Kalender hat, der bleibt damit momentan noch flexibler!

Limitationen die ich momentan sehe:
  • Laut Doku darf man in das Declare-Statement nicht mit dem Script Editor anlegen.  Ich habe es mir im Datenmanager generieren lassen, und dann sehr wohl modifiziert (statt today() das Jahr 1998, damit das YTD vom "aktuellen Jahr" in meiner Nordwind Demo funktioniert). Prinzipiell schient das also möglich, man muss wohl mit dem Qlik Support klären, ob wir das auch dürfen.
  • Der Wizard generiert nur einige Felder, braucht man zB ein YTD vom Vorvorjahr, muss man das Masteritem wieder manuell machen.
  • Die erzeugen Formeln sind nicht "dynamisch". Wählt der User also das Jahr 2015, sieht er im Vorjahresvergleich nicht 2015 und 2014, sondern weiterhin 2017 und 2016. Das kann man sehen, wenn man sich das Declare Statement des Kalenders im Skript ansieht.
  • Declare mit großen Datenmengen hat/hatte ein Performance Problem. Das müsste man in Qlik Sense 3.2 wieder testen.
  • Es werden viele Master Items generiert; ich hatte gehofft, dass man das SET via Parameter an das Masteritem übergeben kann. Ähnlich wie bei Variablen wären die $-Parameter gut gewesen, dann könnte man die Masteritems auch besser gruppieren.
  • Wenn man weitere Set Modifier (zb Source={BUDGET}) in seiner Expressionbenötigt, muss man alle MasterItems manuell nacharbeiten. Ein weiteres Inputfield direkt im Wizard wäre nett gewesen.
Naja, zumindest kann man jetzt eine Nordwinddemo mit YTD-Vergleich ohne jedliches Skripten bauen, und das soll hier auch die Grundlage für unser weiteres Beispiel sein :-)

Charts in Qlik Sense Pivot & Straight Table

Nachdem wir jetzt also YTD und YTD-Vorjahr Masteritems haben, möchten wir diese vergleichen. Eine Prozentzahl können wir natürlich als Zahl in einer Tabelle ausgeben. Aber wie sieht es mit Graphiken aus?

Die beschriebene Applikation finden Sie Online unter demo.heldendaten.net und als Download hier.

Ampel 

Ampeln sind in Straight Table und Pivottable möglich. Man nimmt einfach das Unicode-Zeichen, dass einem am meisten an eine Ampel erinnert und färbt es ein :-) Es gibt sogar eine Unicode Ampel 🚦, die lässt sich aber nicht gut färben, deswegen würde ich sagen ein Block █ ist am Besten! In Qlik Sense kann das dann folgendermaßen aussehen:

Expression: ='█'
ColorCode:  if(column(1) >=column(3), green(), lightred())

Qlik Sense Ampel Traffic Light

Nachteil in der Pivottabelle: dadurch, dass alle Spalten immer gleich breit sind, wirkt die Ampel manchmal ein wenig verloren!

Linear Gauge

Einen Schritt weiter muss man die Idee spinnen, um eine Linear Gauge zu schaffen. Um einen Prozentwert darzustellen kann man mehrere Blöcke █ mit der repeat-Funktion aneinanderreihen. 70% sind dann sieben Blöcke ███████ . Sieht aus wie ein kleines Balkendiagramm.

Expression: =repeat('█', 
                   rangemax(rangemin( ceil(((column(1)/column(2))-1)*10),10),1) 
                  )
ColorCode:       =if([Steigerung]>2, argb(255,0,150,0),
            if([Steigerung]>1, argb(255,0,200,0),
                     if([Steigerung]>0.5, yellow(),lightred())))
 

Qlik Sense Linear Gauge Bar

Die Rangemin/max-Funktionen dienen dazu, dass man minimal einen und maximal zehn Blöcke zeichnet. Negative Werte als "Butterfly" darzustellen ist schwierig, aber das war es in QlikView auch.

Minichart

Schaffen wir mit diesem Ansatz auch ein Minichart oder gar eine Sparkline? Jein! Zumindest die Unterart "Whiskers" von QlikView kann man andeuten. Zum Beispiel für die Fragestellung: habe ich im Vergleich zum Vormonat mehr oder weniger Umsatz gemacht.

Qlik View Mini Chart Whiskers
QlikView Mini Chart Whiskers

Dazu nutzen wir die neue "Sortable Aggr" und zwei verschiedene Blocktypen: ▀ (upper half) und ▄ (lower half)

Expression: 
=concat(
        aggr(
             if(sum(Umsatz) > above(sum(Umsatz)),
               '▀',if(not isnull(above(sum(Umsatz))),'▄',' ')
             )
             ,Kategoriename, (Bestellmonat,(NUMERIC, ASCENDING))
        )
 ,'',Bestellmonat)

Qlik Sense Mini Chart Whiskers


Das Kombidiagramm unterhalb zeigt die Details: wir haben im März 1998 weniger Getränke verkauft als im Feb 1998, im April weniger als im März, und im Mai weniger als im April. Deswegen sind 3 "lower"-Blöcke ▄▄▄ am Ende der Whiskers zu sehen.

Für eine vollwertige Sparkline kommt man mit UniCode-Characters wohl nicht viel weiter. Aber bis das Feature zur Verfügung steht, ist es vielleicht eine gangbare Alternative zu einer Extension!

PS: Alle Formeln sollten eigentlich auch in QlikView 12 funktionieren. Dort würde ich aber jeweils das angestammte Feature hernehmen :-)







QlikView 12 - Offline Hilfe als PDF

Als ich 2008 bei QlikTech begann, gab es noch Software auf CD und gedruckte Handbücher. Zeiten ändern sich! Auf die CD kann man mittlerweile getrost verzichten, mit den Handbüchern ist das so eine Sache...

Qlik gibt sich ja wirklich viel Mühe bei Ihrer neuen Online-Hilfe auf help.qlik.com! Es scheint gerade wieder ein neues Facelift bekommen zu haben.


help.qlik.com
help.qlik.com


Wer die Hilfe im QlikView 12 Developer aufgerufen hat, hat sicher schon bemerkt, dass - anstatt des bisherigen lokalen .chm-Files - nun direkt auf die Onlinehilfe verwiesen wird. Ich würde mir noch wünschen, dass man bei den einzelnen Script-Befehlen noch ein Messageboard integrieren würde, dann könnte man da direkt mit dem Qlik Support kommunizieren.


Schlecht jedoch, wenn man auf einem Entwicklungsserver ohne Zugang zum Internet arbeitet. Dann bekommt man nämlich gar keine Hilfe mehr zu sehen. Der Ärger ist groß bei Parntern & Kunden.

Letztens in der Knowledge Database habe ich es aber in einem Artikel entdeckt: Gut versteckt gibt es jetzt doch wieder PDF Handbücher zum Offline Arbeiten in Deutsch und Englisch:


QlikView PDF Guides



Schlanke 2039 Seiten sind es momentan beim "Arbeiten mit QlikView.pdf"! Ausdrucken werden wir es also wohl nicht :-)






heldendaten GmbH,2017