QlikView Publisher - Monitoring mit Perfmon

Häufig wird bei Hardware Sizing nur über das Qlik Server Service gesprochen. Die harte Arbeit der Datenaufbereitung übernimmt in der Nacht jedoch das Publisher Modul. Viele kleinere bis mittlere Qlik Installationen nutzen für diese (nächtliche) Beladung die gleiche Maschine. Das geht oft gut, doch kämpfen Server und Publisher dann häufig um die gleichen Memory- und CPU-Ressourcen, was über die Zeit bei wachsenden Datenmengen zu unerwünschten Verhalten führt. Um die notwendigen Ressourcen für den Publisher besser monitoren zu können, installiert Qlik - gut versteckt - einige Indikatoren in Microsoft Perfmon.

Das QlikView Server Service ist sehr aggressiv in seiner Memory-Consumption. Ähnlich eines Datenbankservers reserviert es Memory (WorkingSet) vor, da es annimmt, das wichtigste Service am ganzen System zu sein. Auch in der Nacht hält das  QlikView Server Service sein Memory (vor allem wenn es das untere Workingset schon einmal erreicht hat), was dazu führt, dass für die Reloads nur wenig freier Speicher zur Verfügung steht. Laufen dann noch mehrere Reloads gleichzeitig, kann es mit Memory auf einer einzelnen Maschine schnell knapp werden.

Für QMC-Administratoren ist es oft schwierig zu sagen, wann wieviel Tasks gleichzeit laufen und wieviel Last vom Publisher (bzw den qvb.exe des Distribution Services) dabei produziert wird. Seit QlikView 11.20 SR7 kann man sich zwar in jedem TaskLog eine Summary zeigen lassen, das gibt aber kein vollständiges Bild wie sich die Beladungen über einen vollen Nacht-Zyklus inklusive aller Abhängigkeiten verhält.

Um zu verstehen was nächtens bei den Reloads am Server so passiert, gibt es ein gut verstecktes Feature: Das QlikView Distribution Service registriert einige Performance Counter Indikatoren in Microsoft's PerfMon Tool das in jeder Windows Version zur Verfügung steht.

PerfMon - Performance Counter Indikatoren vom QlikView Distribution Service

Nicht alle Indikatoren sind ganz verständlich (und werden wohl nur vom Qlik Support genutzt), aber um sich einen Überblick zu verschaffen, benutze ich gerne

  • # of running tasks .. wieviele Tasks (qvb.exe) laufen gerade
  • Current QVB CPU Load .. CPU Zeit die von den Reload Tasks verbraucht wird.
  • Current QVB memory Usage .. den absoluten Wert kann ich nicht ganz nachvollziehen, aber er zeigt Arbeitsspeicher-Ausreißer bei großen JOINs usw.
Zusätzlich kann man einige Standard Windows-Indikatoren wie Arbeitsspeicher und Prozessorzeit (%) dazuhängen, um das Gesamtsystem zu überwachen.

Die nächsten Sceenhshots zeigen ein Beispiel wie Perfmon den Verlauf über die Zeit mitprotokolliert.



Die hellgrüne Linie zeigt die 4 gerade laufenden Tasks der QMC. Die Dunkelgrüne zeigt die Summe der verbrauchte CPU Zeit dieser Tasks (in Summe vier qvb.exe, in Screenshot sieht man nur eine qvb.exe im Taskmanager, da alle anderen gerade keine CPU verbrauchen). Rot+Blau gestrichelt zeigen den Zustand des gesamten Servers. Die gelbe Linie "Current QVB memory usage" kann ich in absoluten Zahlen nicht deuten, ist aber eine interessante Information um ressourcenfressende Skripte zu entdecken.

Werden die Reloads nach der Reihe fertig abgearbeitet, fallen auch die zwei grünen Linien entsprechend. Siehe unterhalb Screenshot mit nur noch einem laufenden Reloadtask.





Bei größeren Installationen - oder falls Sie viele untertägige Reloads fahren - empfehlen wir immer das Aufteilen der zwei Services "QlikView Server Service" und "QlikView Distribution Service (aka Publisher)".  Im Zeitalter der Virtualisierung und noch immer fallender Memory-Preise ist ein Deployment mit zwei Maschinen vorzuziehen. Beide Services können die vollen Ressourcen Ihrer Maschine nutzen, und kommen sich auch unter hoher Last nicht in die Quere.


Ein exemplarisches Deployment auf  zwei Maschinen für "PRODUKTIV"

 Wo das ManagementService und der Webserver läuft, ist zu vernachlässigen. Manchmal setzt man dafür auch eine dritte Maschine ein.

Geo-Extension NPGeoMap - Touchsupport und neue Demos

Es freut mich, dass bei der Qlik Geo-Extension unserer Wahl "NPGeoMap" die Entwicklung so rasant vorangeht. Die Version 2.5 kommt unter anderem mit Touch-Support für das IPAD sowie drei neuen Demos die die Möglichkeiten der Geo-Darstellungen eindrucksvoll zeigen.

Einen ersten Überblick über NPGeoMap können Sie sich auf heldendaten.net verschaffen. Noch besser Sie sehen sich aber gleich die 3 aktuellen Demos der neuen Version 2.5 an. Auf demo.heldendaten.net/qlikview können Sie unter der Kategorie "NPGeoMap" die Livedemos finden.

NPGeoMap 2.5 Demos auf demo.heldendaten.net

NPGeoMap Demo

In dieser Demo sieht man am Beispiel Österreich wie man die unterschiedlichsten Geodarstellungen als Polygone (Heatmaps auf Flächen), Strecken oder Marker auftragen kann.  Besonders die drei neuen Reiter am Ende der Demo möchte ich hervorheben:  über das neue Touchmenü kann man neben rechteckigen Flächen auch ein oder mehrere Kreise anlegen, und über STRG+Klick die selektierten Punkte dann auch auswählen. Siehe Screenshots unterhalb:

Über das Touchmenü rechts oben in der NPGeoExtension einen Kreis setzen

Über STRG+Klick die Punkte innerhalb des Kreises wählen
Am nächsten Reiter mit der Auswahl weiterarbeiten

NPGeoMap Flights

Diese Demo wurde für Qlik Sense dieses Jahr sogar auf der Qlik Partner Konferenz in Orlando vorgestellt. Es zeigt wie man NPGeoMap nutzen kann, um Flugverbindungen darzustellen. Unterhalb ein Screenshot aus der aktuellen Qlik View Demo.

NPGeoMap Flüge ab Wien

NPGeoMap UBahn

Wer nicht Wegfliegen möchte, aber trotzdem Strecken zu verbinden hat, findet vielleicht Gefallen an dieser Demo.  Die "verzerrte" Plandarstellung im UBahn-Wagon kann man sich also zukünftig sparen. Am Screenshot unterhalb sieht man die tatsächlichen Abstände und Verläufe zwischen den Stationen des Wiener UBahn Netzes.

NPGeoMap UBahn Linien in Wien

Ausblick

In einem der nächsten Einträge werde ich mich dann mit der NPGeoMap Version für Qlik Sense beschäftigen. Was ich bisher gesehen habe, gefällt mir das auch schon sehr gut!








Qlik Sense Desktop in 2 Sprachen (deutsch, englisch) betreiben

Viele Videos und Inhalte zu Qlik Sense finden sich im Internet auf Englisch. Auch wenn man auf der Qlik Community postet, ist es oft zielführender englische Screenshots und Bezeichnungen zu nutzen. Ein deutschsprachiger Laptop zeigt aber Qlik Sense Desktop hartnäckig auf Deutsch an. Hier eine kurze Anleitung wie man das mittels Chrome (und ganz ähnlich in den anderen Browsern) ändern kann.

1) Im Chrome folgende URL eingeben: chrome://settings/languages

(bzw. unter "Einstellungen|Erweiterte Einstellungen anzeigen den Sprachdialog wählen")

Dort "Englisch" als Sprache auswählen und den Button "Google Chrome in dieser Sprache anzeigen" wählen!
Spracheinstellungen Chrome

Chrome schließen, damit die Änderungen übernommen werden.


2) Qlik Sense über das Windows Startmenü normal starten und im Hintergrund geöffnet lassen
3) Chrome wieder starten. http://localhost:4848/hub/ eingeben

 Nun läuft  Qlik Sense Desktop im Browser auf Englisch. Siehe Screenshot.

Qlik Sense Desktop im Browser auf Englisch

Der normale Qlik Sense Desktop im Windows-Startmenü ist weiterhin deutsch (da müsste man scheinbar tatsächlich in der Windows Systemsteuerung die Sprache umstellen)

Dynamische Kundenklassifizierung mit QlikView

Es gibt viele graphische Hilfsmitteln in QlikView um seine Kunden zu klassifizieren. Sei es die Anzeige einer fix gerechneten Klassifizierung aus dem Quellsystem, ein Balkendiagramm in dem man mit der Maus die relevanten Kunden selektiert, oder eine ABC-Analyse. Manchmal möchte der Anwender die Kunden aber erst an der Oberfläche anhand von dynamischen Grenzen auswählen können.

Das Schöne an QlikView ist, dass es die Detaildatensätze im Arbeitsspeicher hält. Anstatt also nur eine vorberechnete Klassifizierung aus dem Quellsystem anzeigen zu können, kann man anhand der aktuellen Selektion dynamisch Kunden wählen. Unterhalb zwei Beispiele wie man solche Anforderungen in QlikView userfreundliche lösen kann.

1. Selektiere Kunden anhand eines Umsatzbereiches

Will der Anwender also alle Kunden filtern, die im August 2015 zwischen 1.500 und 5.000€ Umsatz gemacht haben, kann er das prinzipiell mit dem Feature "Erweiterte Suche" tun. Jedoch ist einiges an Tipparbeit nötig und auch die Formel-Syntax ist oft nicht ganz einfach. Deswegen stellen wir unseren Anwendern hierfür zwei Inpuvariablen (für die Umsatzgrenzen) und eine Schaltfläche bereit, welche die Drecksarbeit übernehmen:

Ein Klick auf den Button selektiert Kunden mit Umsatz im Aug 2015 zwischen 1,500 und 5,000€
Nach dem Klick sieht man die Syntax der Erweiterten Suche in der Auswahlstatus-Box. Es wurden acht Kunden selektiert.


Mit dieser Auswahl an Kunden kann der Anwender nun weiter analysieren: Wählt er zum Beispiel den September, sieht er, dass erst zwei der acht Kunden im aktuellen Monat Umsatz generiert haben.


Die Syntax der dynamischen Suche auf das Feld "Firma" wird in der "Auswahl in Feld"-Aktion der Schaltfläche weggekapselt:

='=sum(Umsatz) >= $(vSuchwertMin) and sum(Umsatz) <= $(vSuchwert)'

2. Klassifiziere Kunden anhand eines durchschnittlichen Bestellwertes

Abhängig von z.B. der Produktkategorie kann der durchschnittliche Bestellwert eines Kundens stark variieren: der Bestellwert bei Ersatzteilen ist niedriger, als wenn man eine ganze Maschine kauft. Insofern ist eine vorberechnete Klassifizierung im Vorsystem oft nicht ausreichend, da dort die Klassifizierung zumeist über alle Bestellungen des Kunden vorgenommen wird.

In unserem Beispiel sehe wir, dass im Jahr 2015 in der Kategorie "Milchprodukte" neun Kunden existieren, die einen durchschnittlichen Bestellwert größer 700€ haben. Das sind für den Anwender die "A Kunden" in dieser Kategorie. Die Grenzen für die ABC-Kunden kann über die Inputbox frei definiert werden.

9 Kunden haben einen durchschnittlichen Bestellwert von mehr als 700€ im Jahr 2015 für Milchprodukte

Eine Auswahl in der Listbox liefert uns die "A Kunden". Man sieht auch, dass nach Klassifizierung des Vorsystems zwei dieser Kunden eigentlich als "B Kunden" firmieren. Klar, denn diese Klassifizierung ist nicht dynamisch anhand der aktuellen Userselektion und Umsatzgrenzen.
 

Ändert man die Produktkategorie nun auf "Getränke", sieht man, dass hier die Klassifizierung anders aussieht: wir hätten bei gleicher 700€-Grenze mit "QUICK-Stop" nur einen der neun Kunden als "A Kunden"! Vier der anderen Kunden sind in dieser Kategorie überhaupt nur C-Kunden.



Die Implementierung der Selektion ist mit einer dynamische Listbox gelöst. Die AGGR-Funktion berechnet dynamisch anhand des Feld Firma und der Bestell-Nrs die ABC-Klassifizierung.

=aggr(
 if(
  avg(
   aggr(
    sum(Umsatz),Firma,[Bestell-Nr]
   )
  ) < $(vSmall), dual('C Kunde: Umsatz <$(vSmall)',1),
  if(
   avg(
    aggr(
     sum(Umsatz),Firma,[Bestell-Nr]
    )
   )< $(vMedium), dual('B Kunde: $(vSmall) < Umsatz < $(vMedium)',2), 
   
   dual('A Kunde: Umsatz >= $(vMedium)',3))
  ) 
  
  
,Firma)

Das gesamte Beispiel finden Sie hier.

PS: die AGGR in AGGR wäre hier nicht unbedingt notwendig. sum(Umsatz)/count(Distinct Bestell-Nr) ginge auc; aber schön das zu zeigen :-)

Datenvisualisierung mit data.gv.at und Qlik Cloud

Das österreichische Bundeskanzleramt und die Stadt Wien stellen auf der Plattform data.gv.at  einen Katalog offener Datensätze aus der öffentlichen Verwaltung bereit, welche auf den Open Data-Prinzipien basieren. Mit  QlikCloud bietet Qlik eine freie SaaS Qlik Sense Version, mit der wir aus diesen Datensätzen aussagekräftige Visualisierungen erzeugen können.

Wenn Sie sich gratis bei QlikCloud anmelden, bekommt Sie 1 Gigabyte an Space auf denen Sie Ihre Visualisierungen ablegen kann. Wenn Sie in einem Team arbeiten, können Sie die Applikationen mit bis zu 5 Personen teilen.

Das Erstellen einer Applikation

Zum Testen habe ich mir die Standorte für Carsharing  in Wien von data.gv.at heruntergeladen. Das Erstellen einer neuen Qlik Sense App in der Cloud ist simple:

1) Entweder laden Sie eine bestehende .qvf Datei hoch, die Sie mit dem Qlik Sense Desktop aufgebaut haben, 
oder

2) Sie laden die .csv Datei von data.gv.at per Drag&Drop in die QlikCloud und erstellen die Applikation komplett online.

Nachdem man die GeoPunkte in das Qlik Format transformiert hat, steht einem eine in der QlikCloud eine vollwertige Qlik Sense Entwicklungsumgebung zur Verfügung: Die Standorte habe ich mit dem Kartenobjekt visualisiert, das Kartenmaterial kommt automatisch von OpenStreetMap. Für die Standortdetails und die Anzahl der Standorte pro Bezirk habe ich unterhalb weitere Darstellungen ergänzt.


Um zu Analysieren welche Standorte nördlich der Donau sind, benutze ich die Lassoselektion.

Das Teilen einer Applikation

Wenn Sie Ihre Applikation teilen möchten, können Sie bis zu 5 Personen einladen Ihre Visualisierung online mit zu nutzen. Einfach ein Rechtsklick auf die Applikation und den Menüpunkt "In gemeinsam genutzter Cloud veröffentlichen" wählen.



Dort können Sie über den Button "Freigeben" bis zu 5 Email Adressen zu Ihrer Applikation einladen.



Das Teilen einer Visualisierung

Wenn Sie ein Visualisierung direkt auf Ihrer Webseite oder Ihrem Blog einbinden wollen, können Sie das mittels "Qlik Sense Charts" tun. Rechtsklick auf die Visualisierung und "Teilen" wählen. Sie bekommen eine URL bzw. eine IFRAME Definition um das Chart einbinden zu können.


Hier ein Beispiel die Integration der interaktiven Kartenvisualisierung als IFRAME in unserem Blog

QlikView ServiceRelease 11+12 "Still Show Total on Top" Sommerupdate

Der Hitze geschuldet nur ein schnelles Update: Der Hauptgrund für das QlikView 11.20 Service Release 12 haben wir unseren Kunden natürlich sofort kommuniziert. Das neue Verhalten des QlikView Developers bei ungültigen Expressions seit SR11 führt zu einigen weißen Boxen wo früher Diagramme waren. Wer sich damit nicht abfinden möchte, findet das Easter Egg bei Rob Wunderlich zum Nachlesen um wieder das alte Verhalten herzustellen.

Ein neues Setting möchte ich den Fans von gestapelten Balkendiagrammen natürlich nicht vorenthalten: Um neben den Segmentwerten auch die Gesamthöhe des Balkens zu beschriften, gibt es nun die Einstellung "Still Show Total on Top". Siehe Screenshot unterhalb.

SR5 kann es noch nicht. Aber SR12 zeigt die Summe des Balkens nun dank "Still Show Total on Top"


Ältere QlikView Versionen (wie links im Screenshot SR5) ignorieren die Einstellung. Mit SR12 sehen Sie nun auch die Summe auf den Balken. Finden wir gut! Aber jetzt ab ins Freibad :-)


Qlik Sense 2.0 - Smart Data Compression - Wie gebräuchlich ist denn Ihr Passwort?

Vergangene Woche ist Qlik Sense 2.0 erschienen, und natürlich haben wir unsere Demo-Umgebung demo.heldendaten.net sofort hochgezogen. Einen guten Überblick bekommen Sie in diesem einstündigen Qlik Sense Getting Started Video.Wir wollen uns hier mit einem der herausstechenden neuen Feature beschäftigen: Qlik Sense Smart Data Compression.


Vor einiger Zeit hat der Security-Experte Mark Burnett 10 Millionen Datensätze mit Usernamen und Passwörtern veröffentlicht. Nein, kein neuer Leak irgendeines Netzwerks, sondern eine Benutzerdaten die schon bisher auf verschiedensten Wegen im Internet auffindbar waren. (Trotzdem hatte er wohl ein wenig Angst vor dem FBI). 10 Millionen Datenpunkte in eine einzelne Darstellung zu bekommen ist natürlich eine Herausforderung. Qlik Sense Smart Data Compression ist dabei äußerst dienlich.*


Smart Data Compression

Ich wolle eine schnelle Darstellung die zeigt, welche Passwörter von wievielen Usern benutzt werden. Ein normaler Scatterplot mit so vielen Datenpunkten ist nicht sehr hilfreich, weil die Datenpunkte überlappen würden. Smart Data Compression agiert hier wie eine Art  zoombare "Heatmap":

Smart Data Compression komprimiert die 2.8 Millionen Passwörter in eine Heatmap
Wir sehen durch die dünklere Blaufärbung, dass die meisten Personen ein  achtstelliges Passwort benutzen. Wenn wir mit dem Mausrad hineinzoomen, sehen wir, dass etwa 840.000 achtstellige Passwörter in unseren Daten enthalten sind.

6 bis 10 stellige Passwörter scheinen am gebräuchlichsten zu sein




Die populärsten Passwörter sind immer spannend: Selektiert man die oberen Ausreißer an der Y-Achse, so sieht man jene Passwörter die man besser nicht benutzen sollte: "qwerty", "123456" und Konsorten. Immerhin 62.621 User setzen auf eines dieser sechs Passwörter.

Zoom In jene Passwörter die von mehr als 5.000 Usern benutzt werden.

Aus den 2.8 Millionen Passwörtern die 6 häufigsten gefiltert! Bitte besser nicht benutzen! 



An der X-Achse kann man die Länge der Passwörter wählen.  Wir sehen, dass es eine Person mit einem 42-stelligen Passwort gibt. Das scheint eine sichere Wahl zu sein (außer das Passwort wird eben geleakt). Wählen wir alle Passwörter mit 10-stellig bis 42-stellig, sehen wir dass nur 12,82% der 5 Millionen User ein mehr als 9 stelliges Passwort haben. Oder anders ausgedrückt: 87,18% haben ein kurzes Passwort, das man wohl mittels Brute Force innerhalb 6 Stunden knacken könnte.

Die Selektion an der X-Achse wählt die 641.184 User die ein >= 10 stelliges Passwort nützen


Die anderen 4.360.798 Benutzer haben Passwörter mit weniger als 10 Zeichen


Global Search

Sie wollen testen wie gebräuchlich Ihr eigenes Passwort ist? Benutzen Sie die Global Search in Qlik Sense. Wenn Ihr Lieblingspasswort "elvis" ist, teilen Sie sich das Passwort immerhin mit 181 anderen Personen. Das Passwort "beatles" ist zwar um 2 Zeichen länger, hat aber dafür gleich 246 Treffer. Also auch nicht sehr sicher.

Globale Suche nach Passwörtern in denen "elvis" vorkommt

Der King lebt in unseren Passwörtern weiter!
Wobei: die Beatles sind als Passwort noch beliebter!



Die Qlik Sense Applikation gibt es ausnahmsweise nur auf Anfrage; ein wenig Angst vor dem FBI haben wir auch, wenn die ganze Sache so einfach zum Analysieren ist wie mit Qlik Sense .

Unterhalb das Video wie man die oben genannten Analysen mit Qlik Sense AdHoc durchführen kann.




* 10 Mio Datensätze waren für meinen 8GB RAM Laptop dann doch zu viel. Deswegen habe ich mittels dem Sample Load 5.001.982 Datensätze und damit 2.843.213 eindeutigen Passwörtern aus den Daten gezogen.

QlikView & Was für Felder habe ich denn da gerade selektiert?

Mit QlikView kann man seit der Version 10 Kommentare für Feldnamen hinterlegen, um etwa zu erklären aus welcher Datenquelle das Feld stammt und was das Feld beinhaltet (Klassische Frage: enthält das Feld Datum das Bestelldatum, das Rechnungsdatum oder das Lieferdatum?). Dieses Feature kam bisher vor allem Entwicklern und Fachanwendern zu gute, die selbst QlikView Applikationen entwickeln. Seit QlikView 11.20 Service Release 9 werden diese Feldbeschreibungen über den QlikView Accesspoint nun allen Benutzern bereitgestellt.

Beschreibende Infos liegen uns am Herzen. Wie wir hier beschrieben haben, ist es unserer Meinung ideal bereits in der Entwicklung am QVD-Layer eine Beschreibung für jedes Feld zu hinterlegen. Hat man beispielsweise SAP kann man aus dem Data Dictionary die Feldbeschreibung automatisch nach QlikView übernehmen.

An der Oberfläche hatte man bisher schon die Möglichkeit bei jedem Objekt ein Kommentar zu hinterlegen. Ist unter "Eigenschaften|Titelleiste" ein Kommentar eingetragen, so erscheint beim Objekt ein Fragezeichen-Icon. Wer mehr als einen kurzen Text erklären möchte, kann mittels unserer Document Extension auf ein Wiki/eine Webseite abspringen.
 

Für Applikationserklärung hat sich über die Jahre der "Info"-Button durchgesetzt. Mittels Show/Hide-Bedingungen werden Objekte eingeblendet, die die Funktionalität bzw. Inhalt der Applikation erklären.


In QlikView 11.20 SR9 ist uns eine Neuerung im IE-Plugin aufgefallen: Fährt man in der Auswahlbox über ein selektiertes Feld, so wird das im Skript hinterlegte Feld-Kommentar als Tooltip angezeigt.

Das ist sehr praktisch, denn im Gegensatz zum Ansatz mit "Titelleiste|Kommentar", hat man für Gewöhnlich nicht für jede Feldselektion eine eigene Listbox bei der man ein Kommentar hinterlegen kann (weil man zB. Multibox oder Globale Suche nutzt). Weiters hat der Benutzer in der Auswahlbox nun einen zentralen Punkt wo er alle Felderklärungen sehen kann, sobald er einen Filter darauf gesetzt hat.

Der "COMMENT Fields" Befehl im Skript sorgt für die Erklärung des Feldes "Kunden.Firma" in der Auswahlbox


Für QlikView-Entwickler die bisher schon das COMMENT-Feature benutzt haben, heißt das:
  • Achtung wenn Sie bereits Feldbeschreibungen definiert haben, die nicht für jedermann bestimmt sind! Nun sehen auch all Ihre Anwender das Kommentar
  • Fügen Sie das COMMENT Field erst nach dem BINARY-Load ein; sonst gehen die Kommentare verloren
  • Im AJAX-Client sehen wir das Kommentar als Tooltip noch nicht. Wir werden uns schlau machen, ob wir dieses sinnvolle Feature auch dort bekommen können.





Qlik Sense - Mashup Integration mit Drupal CMS auf qvheroes.com

Die Themen Integration und Mashup sind eine der großen Stärken von Qlik Sense. Wir haben unsere Webseite qvheroes.com genutzt, um zu demonstrieren wie man interaktive Qlik Sense Analysen direkt in die eigene Webseite einbauen kann.

Meistens sind Integrationen von Dashboards  und Analysen lediglich via HTML und <IFRAME> gelöst; ein <IFRAME> ist jedoch bloß ein unabhängiger "Reiter" der sich innerhalb der eigentlichen Webseite öffnet. Diese <IFRAME> Integrationen haben keine Möglichkeiten auf die Darstellung (den DOM-Tree) der "aufrufenden" Webseite zuzugreifen um diese bei Bedarf zu ändern.

Warum möchte ich, dass meine Analysen mit der Webseite interagieren? Es wäre doch hilfreiche, wenn ein Filter auf meinem Dashboard sich direkt auf die dargestellten Werte meiner Webseite auswirken würde. Sei es nun meine Börsen-Webseite, mein Online-Banking oder ein Online Auto-Konfigurator.

Für unseren Blog-Aggregator qvheroes.com haben wir genau das gemacht, und Qlik Sense direkt in den DOM-Tree der Seite eingebaut:

Der obere Teil der Webseite zeigt einige Analysen zu den gesammelten "Blogs" an. Die Darstellungen sind Qlik Sense Elemente, die wir mit der Mashup API in das Drupal CMS unserer Webseite eingebaut haben.


Weiter unten befinden sich die Liste der Blogeinträge auf qvheroes.com, sortiert nach Datum.


Wie man in dem Video unterhalb sehen kann, interagiert nun Qlik Sense mit der Webseite. Filtere ich auf spezifische Blogs - etwa heldendaten.net - werden mir auch nur noch die Beiträge dieser Quelle angezeigt. Die Buttons "Clear All", "Back" und "Forward" sind hingegen Teile von Drupal, die in Qlik Sense Filter verändern.

 

Technische Notizen


Mit QlikView waren derartige Integrationen meist mühsam, vor allem aufgrund der Same Origin Policy die alle modernen Browser implementiert haben, und Integrationen mit dem AJAX-Client erschwert haben. Da Qlik Sense für die Kommunikation auf Websockets setzt, fällt dieses Problem weg:

  • qvheroes.com ist bei einem amerikanischen Webhoster gehostet
  •  unsere Qlik Sense Umgebung läuft  - wie hier beschrieben - auf einer Amazon Maschine und ist eigentlich über http://demo.heldendaten.net:8080/hub/ erreichbar
  •  man kann im Qlik Proxy mehrere Domains whitelisten mit denen die Websocket Kommunikation erlaubt wird. Bei uns sieht das folgendermaßen aus:

Qlik Sense QMC Virtual Proxy Settings


- Die Qlik Sense Applikation wird über den Hub gebaut, und ist auch direkt auf unserer demo.heldendaten.net QlikSense Umgebung verfügbar. Die einzelnen Darstellungen wurden mittels Qlik Sense Workbench aus der Applikation "herausgeholt" und auf qvheroes.com eingebunden.

- Der "Kleber" der die beiden Welten - Qlik Sense und Drupal - zusammenhält sind dann einige Javascript-Libraries (JQuery, JQuery UI, require.js,gridstack.js) und bloß ca. 150 Zeilen customized Code! Falls jemand die Code-Details interessieren: einfach melden!


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.



QlikView Easter Eggs - ObjectTimeLimitSec - sinnlose Chart Berechnung abbrechen

Selbst dem erfahrensten QlikView Entwickler passiert es manchmal: man baut ein Diagramm, das nicht und nicht zu rechnen aufhören will. Vermutlich hat man unabsichtlich ein kartesisches Produkt, oder irgendetwas Ähnliches produziert.

Der QlikView Developer ist äußerst gutmütig und versucht jedes Objekt "fertig" zu rechnen. Entweder kann man auf eine ausgedehnte Kaffeepause gehen, oder man verliert die Nerven und beendet die Qv.exe im Taskmanager. Besonders bitter wenn das letzte Speichern der .qvw Stunden zurückliegt ("Benutzereinstellungen|Speichern|Wiederherstellungsdatei anlegen" hilft doch manchmal).

Der QlikView Server kennt die Einstellung "Object Calculation Time Limit". Defaultmäßig gibt der Server  das Berechnen eines Objektes nach 60 Sekunden auf. 60 Sekunden stimmt nicht ganz, denn meiner Meinung nach multiplizieren sich diese 60 Sekunden mit Anzahl der Cores am Server. Hat man also 8 Cores, versucht der Server 8 Minuten lang ein Objekt zu berechnen >> viel zu lange, weswegen wir dieses Setting gerne auf 5 oder 10 Sekunden stellen.


QlikView Server Object Calculation Time Limit
Der Screenshot zeigt einen QlikView Server mit "Object Calculation Time Limit" von 10Sek*4Cores = 40 Sek


Am QlikView Developer gibt es diese Einstellung ebenfalls --> allerdings nur  versteckt mittels Eintrag "ObjectTimeLimitSec" in den QlikView Easter Eggs. Defaultmäßig ist der Wert auf -1 (unendlich), weswegen der QlkView Developer eben nie aufhört das Objekt zu rechnen. Gerade während der Entwicklung ist es jedoch sinnvoll, die Berechnung von fälschlicherweise definierten "Langläufern" nach einer gewissen Zeit abzubrechen. Unterhalb ein Video und ein Screenshot wie Sie den Wert ändern können.





QlikView Developer Easteregg ObjectTimeLimitSec
Rechtsklick auf das QlikView Logo zeigt den Easter Egg Dialog.


Wer also vor sich selbst und seinen Entwicklungskünsten in Schutz genommen werden möchte, setzt den Wert "ObjectTimeLimitSec" zum Beispiel auf 10! Zum Testen können Sie diese .qvw herunterladen, die ein Tabellendiagramm mit kartesischen Produkt beinhaltet. --> Haben Sie "ObjectTimeLimitSec" korrekt gesetzt, sehen Sie die Fehlermeldung "Timeout bei Berechnung".
QlikView Screenshot Lange Berechnung
Auf den Versuch das fehlerhafte Chart zu rechnen....

QlikView Timeout Fehlermeldung
... folgt die Fehlermeldung "Timeout bei der Berechnung"



PS: die meisten Einstellungen in den Easter Eggs lassen sich über den normalen Benutzereinstellungen-Dialog ändern. Einige "Versteckte" gibt es trotzdem.  Einen zweiten Eintrag den ich gerne setze ist "DataPreviewSize" --> dann bekommt man mehr Zeilen  in der Tabellen-Vorschau unter der CTRL+T "Tabellenstruktur" Ansicht.

DataPreview QlikView Easter Egg
QlikView 1000 Lines in Tabellenstruktur
1000 statt 100 Zeilen im Tabellenstruktur Preview

PPS: Support gibt es für diese Easter Eggs natürlich keine :)
heldendaten GmbH,2017