Posts mit dem Label Frontend werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Frontend werden angezeigt. Alle Posts anzeigen

K-Means Clustering in QlikView und Qlik Sense

Qlik Sense hat im Sept 2020 Release native k-means Clustering Funktionen erhalten. Man benötigt dafür also nicht mehr zwingend eine Advanced Analytics Connection nach R/Python.  

Da die Funktion auf Engine-Level existiert, war die Wahrscheinlichkeit recht hoch, dass auch das nächste QlikView Feature Release May 2021 diese Funktionen erhält. In den Release Notes und What's New wird es ausgeschwiegen, aber in der Hilfe findet man auch die entsprechenden QlikView Funktionen.


In der Qlik Sense Hilfe befindet sich ein recht ausführliches Beispiel mit einem Scatterplot. In QlikView nicht.

Da die kMeans Funktionen nur eine Zahl (die Clusterklasse) zurück liefern, ist sie nicht ganz so intuitiv zu benutzen wie vielleicht erwartet. Um eine Punktfärbung mit bestimmten Wunschfarben zu erreichen, muss man ein paar Dinge wissen:

 

kMeans  mit 5 Cluster  der Artikelname Frachtkosten zu Umsatz

Ein alter Trick um in Qlik an Farben zu kommen ist die color() Funktion. In QlikView waren das die Default-Farben die in jedem Chart zu definieren waren. Die Funktion gibt es auch in Qlik Sense, wobei ich nicht weiß wo man die Defaultfarben overrulen könnte. Entsprechend nutzt das Beispiel oberhalb


color(
KMeans2D(5,sum(Frachtkosten),sum(Anzahl*Einzelpreis))+1
)-pow(2,30)



Der Trick mit pow(2,30) ist hier beschrieben. Er macht die Punkte ein wenig transparent um ihre Dichte anzudeuten. In der tabellarischen Darstellung kann man die Farbe ebenfalls als Hintergrundfarbe für die gewünschten Spalten nutzen.


Kniffliger wird es, wenn man  für jeden Cluster eine eigene Farben definieren möchte. Da kommt die pick() Funktion zur Hilfe. Nachdem kMeans2D eine Zahl liefert, kann ich es als Input für pick() nutzen.


pick(
KMeans2D(5,sum(Frachtkosten),sum(Anzahl*Einzelpreis))+1,
red(),lightred(),DarkGray(),green(),LightBlue()
) - pow(2,30)


Der oberste Cluster wird dank pick() immer lightblue() sein.


Und was ist nun mit QlikView May 2021 (QlikView 12.60)? Dort funktionieren diese Formeln genauso.


In QlikView kann man sogar bei der Auswahl der Cluster in einer Listbox die Farbe mitgeben. Die Listbox selbst muss mit aggr () definiert sein. Im Beispiel kann man zwischen Land und Artikelnamen hin und herschalten - deswegen eine Variable vDim.


=aggr('$(vDim)gruppe ' &    

(5- ( KMeans2D(5,sum({1}Frachtkosten),sum({1}Anzahl*Einzelpreis))))

,$(vDim))


Als Expression dann die Formel als "Traffic Light Gauge" darstellen. Dann kann man dort über die Segments-Farben das pick() nachbauen.

In der Listbox die Clusterfarben hinterlegen


Beispiel für QlikSense und QlikView findet sich hier.



Year to Date Vergleich - auf der Landkarte

Ein Year to Date Vorjahresvergleiche in einer Tabelle? Das bekommt jeder versierte Qlik Entwickler mit ein wenig Set Analysis hin. Aber auf eine Landkarte? Da wird es kniffliger!



Das Kartenobjekt hat seit geraumer Zeit die Diagrammebene zur Darstellung von Kreis- und Balkendiagrammen auf Landkarten. Das Problem ist: was soll man hier als "Balken-Dimension" wählen wenn man zwei Balken für den Vorjahresvergleich zeichnen möchte? 

Mit den richtigen Kalenderfeldern vielleicht eine Dimension Jahr. Wer mutig ist versucht hier hingegen eine Valuelist() als synthetische Dimension.

Die Valuelist definiert welche Balken es geben soll





Die Funktion Valuelist() gibt es schon immer, hat ihre Macken, ist syntaktisch nicht sehr elegant - aber zumindest kann sie nun auch selbst ein Masteritem sein und mit Masteritems rechnen. Sogar Bibliotheksfarben kann sie annehmen, um die Balken auf der Karte wie gewünscht zu färben.

Aktuelles Jahr soll blau, Vorjahr soll grau sein.

Die eigentliche Kennzahlformel bezieht sich dann auf die Valuelist. Wir verwenden als die bestehenden Masteritems für den YTD-Vergleich wieder.
=if (
  valuelist('YTD Vorjahr','YTD Aktuelles Jahr') = 'YTD Vorjahr', 
  [YTD Vorjahr],
  [YTD Aktuelles Jahr]
  )

Daneben noch eine normale Tabelle mit den YTD-Kennzahlen, dann sieht das Ergebnis folgendermaßen aus.




Richtig spannend wird es, wenn man nicht nur 2 Formeln, sondern beliebige KPIs auf die Landkarte bringen möchte. Da spielt die Valuelist() nun ihre ganze Stärke als synthetische Dimension aus. Man erfindet einfach die gewünschten Ausprägungen.

In unserem Beispiel wollen wir nicht nur YTD-Kennzahlen sondern auch das aktuelle Monat (und Vergleichsmonat des Vorjahres) als Balken andrucken. Die Definition der Valuelist wird also länger.






Das Leerzeichen zwischen YTD Kennzahlen und den Monatsvergleich sorgt für einen optischen Abstand zwischen den Balken. Via Bibliotheksfarben können wir zudem Kennzahlen farblich gruppieren.  Unsere neuen Kennzahlen sollen grün sein. Der Platzhalter ist weiß.

Jedem Eintrag in der Valuelist eine Farbe geben




Achtung beim Sortieren der Valuelist in der Diagrammebene! Damit die Balken in der angegebenen Reihenfolge kommen, muss man die Dimension ohne Sortierung definieren.



Die Kennzahl rechnet nun für jeden Valuelist-Eintrag die gewünschte Kennzahl. Damit haben wir nun 4 Balken.

=if(
	valuelist('YTD Vorjahr','YTD Aktuelles Jahr',' ', 'Aktuelles Monat', 'Vorjahr Monat') = 'YTD Vorjahr',
    	[YTD Vorjahr],
if(
	valuelist('YTD Vorjahr','YTD Aktuelles Jahr',' ', 'Aktuelles Monat', 'Vorjahr Monat') = 'YTD Aktuelles Jahr',
    [YTD Aktuelles Jahr],
if(
	valuelist('YTD Vorjahr','YTD Aktuelles Jahr',' ', 'Aktuelles Monat', 'Vorjahr Monat') = ' ',
    0,
if(
	valuelist('YTD Vorjahr','YTD Aktuelles Jahr',' ', 'Aktuelles Monat', 'Vorjahr Monat') = 'Aktuelles Monat',
    [Aktueller Monat],
if(
	valuelist('YTD Vorjahr','YTD Aktuelles Jahr',' ', 'Aktuelles Monat', 'Vorjahr Monat') = 'Vorjahr Monat',
    [Aktueller Monat Vorjahr])))))
    
    


Kleiner Tipp am Rande: manchmal ziehe ich mit sqrt() die Wurzel aus der Kennzahlformel. Dann sind hohe Balken nicht mehr ganz so hoch. Zwar sind dann die absoluten Zahlen falsch - aber mehr als ein Indikator sind die Balken auf der Landkarte sowieso nicht.

Wer dann einen richtigen Tooltip haben will, muss diesen natürlich manuell überschreiben.




Der Download der .qvf findet sich hier.


Qlik: Wähle alle Materialnummern aus Excelsheet mit einem Klick

Eine der Fragen die wir in letzter Zeit wiederholt bekommen haben: Wie kann ich in Qlik alle Materialnummern auswählen die ich zB in einem Excel gespeichert habe. Soviel sei vorab verraten: Alle Werte einzeln anklicken ist nicht die beste Antwort!

Massenselektion in Qlik Sense


Die normale Such-Lupe in einem Filter ist auf 5000 Zeichen limitiert. Selbst wenn der Endanwender also die Qlik Syntax mit 

(A1|A2|A3)

hinbekommen würde, ist bei vielen oder langen Materialnummer sehr schnell das Limit mit der Suche erreicht.

Qlik Sense Klammern Suche
Diese Suche funktioniert, aber bei 5000 Zeichen ist Schluss.


Besser ist, man macht eine "Variable Input" auf eine Variable vSearchListe. Inputboxen können längere Textketten aufnehmen. Wenn man mehrere Zeilen von Excel (oder sonst wo) nach Qlik kopiert, erhält man normalerweise Leerzeichen zwischen den Werten. Entsprechend muss man aus den Einträgen 

A1 A2 A3

in der Inputbox wieder die Qlik Syntax 

(A1|A2|A3)

machen.


Dafür benötigen wir einen Button mit der Aktion "Wähle Sie Werte aus, die dem Suchkriterium entsprechen". Der dynamische Wert ist: 

='('& replace(vSearchListe,'$(vTrennzeichen)','|') &')'



Interessanterweise scheint die Aktion keine Limitierung auf 5000 Zeichen zu haben. Somit kann man richtig viele Werte auf einmal selektieren.

Das Trennzeichen könnte natürlich auch ein Beistrich oder ein Strichpunkt sein, wenn man zum Beispiel Nummern aus einer .csv Datei kopiert. Deswegen halten wir das Trennzeichen in der Variable vTrennzeichen dynamisch.


Die Search Beispiel .qvf findet sich hier. Gleicher Trick funktioniert übrigens auch in QlikView!





Bundesländer & Bezirke - Automatisch in Qlik Sense

In der öffentlichen Wahrnehmung sind Kartendarstellungen wohl die "großen Gewinner" des Jahres 2020. Im Jahr 2021 geht es nahtlos so weiter, denn es wurde gerade ein neues Impfdashboard vom Gesundheitsministerium gelauncht. Die Daten dazu wurden auch auf data.gv.at veröffentlicht.  Ein guter Zeitpunkt zu prüfen, wie Qlik Sense diese Geodaten automatisch in Gebietsebenen interpretiert.

Impfdashboard in Qlik Sense mit data.gv.at Daten




Das Impfdaten .csv von data.gv.at enthält die Bundesländer-Namen als Text. 





Qlik versucht für Kartendarstellungen diese Feldinhalten automatisch mit geonames.org abzugleichen. Das wird nicht online gemacht, sondern Qlik hat einen internen Lookup der mitinstalliert wird.

Bundesländer Österreich auf geonames.org


Das funktioniert bei den 9 Bundesländern in Österreich problemlos. Um Qlik bei der Flächenfärbung in der Gebietsebene zu unterstützen, sollte man auch immer die Einstellung Standort/Standorttyp erzwingen. Im Fall von Bundesländern ist das "Verwaltungsgebiet (Ebene 1)". Ein wenig Hintergrund zu dieser Einstellung findet sich in der Qlik Community am Beispiel der Stadt Springfield.




Für Bezirke (Verwaltungsgebiet (Ebene 2)) geht man ähnlich vor. Auch hier liefert data.gv.at etwa die "Anzahl Fälle pro Bezirk" für Corona-Daten. Leider passt die Schreibweise der Bezirksnamen hier nicht ganz so gut zu den Bezirksnamen auf geonames.org. Nach dem initialen Laden der Daten bekommen wir eine lückenhafte Gebietskarte in Qlik Sense.


Um das Problem zu lösen, muss man die Schreibweise von data.gv.at auf die Schreibweisen bei geonames.org anpassen. Statt Graz(Stadt) würde sich Qlik Sense etwa Graz Stadt erwarten.

Geonames.org über Feature Class sagen was man sucht



Zur Korrektur der Bezirksnamen muss man (einmalig) ein Mapping der falschen Bezirksnamen durchführen. Wir haben hierfür ein Excel erzeugt.

Mappe alle Einträge die auf der Karte noch lückenhaft waren.




Dieses Excel nutzen wir dann um ein neues Feld "BezirkClean" zu erzeugen.

GeoNames:
Mapping
LOAD
    Bezirk,
    Laut_GeoNames_org
FROM [lib://data_gv_at/BezirksnamenFürQlik.xlsx]
(ooxml, embedded labels, table is Sheet1) where len(trim(Laut_GeoNames_org)) > 0;




data:
LOAD
    Bezirk,
    applymap('GeoNames',Bezirk,Bezirk) as BezirkClean,
    Anzahl,
    Anzahl_Inzidenz,
    GKZ,
    "Timestamp"
FROM [lib://data_gv_at/Bezirke.csv]
(txt, utf8, embedded labels, delimiter is ';', msq)
;

Mit diesem Feld erzeugen wir wieder eine Gebietsebene. Als Standorttyp wählen wir "Verwaltungsgebiet (Ebene 2)".



Wien kommt leider als eine große Fläche. Will man Wien in seine Bezirke unterteilen, so muss man eine eigene .kml Karte in Qlik Sense laden, wie hier im Blog beschrieben. Postleitzahlen von Österreich werden leider auch nicht automatisch zu einer Gebietsebene. Qlik Sense malt hier nur eine Punktebene. Für eine Gebietsebene würde man ebenfalls eine eigene .kml benötigen. Siehe Details zur Qlik Sense Geo Coverage in der QlikCommunity.

Die .qvf und das Excelmapping findet sich hier zum Download.


Qlik Sense BBQ

Wer für den (österreichischen) Vatertag am Sonntag noch das passende Stück Fleisch zum Grillen sucht - hier die heldendaten Qlik Sense BBQ App!

Qlik Sense BBQ App
Qlik Sense BBQ

Über Kartendarstellungen habe ich hier, hier und hier schon öfter geschrieben. Ein Thema das ich selbst noch nie versucht hatte, war eine .kml-Datei aus einem Bild bzw. "Clipart" aufzubauen.

In der Qlik Community gibt es dazu eine gute Anleitung von Patric Nordström. Zur kleinen Berühmtheit schaffte es diese Feature mit diesem Qlik Sense Body Map Beispiel.

Bei uns sollen es nun eben die Teilstücke des Rindes sein. Das eignet sich vorzüglich für die Grün-Weiß-Grau Stärken von Qlik: jedes Stück kann unterschiedlich zubereitet werden (gegrillt, gekocht, geschmort) und kann unterschiedliche Verwendungen haben (Steak, Gulasch, Geschnetzeltes).

Ausgangspunkt war dieses Bild.

Bitmap Bild für interaktive Qlik Sense Karte
Bitmap Bild für interaktive Qlik Sense Karte

Beim ersten Erstellen einer .kml-Karte muss man sicherlich ein wenig Zusatzaufwand einrechnen, um alle Tools von Patric zum Laufen zu bekommen. Aber mit etwas Übung kann man ein entsprechendes Bild mit 1-2 Stunden Aufwand in Flächenpolygone umwandeln und nach .kml exportieren. Hier meine Screenshots mit den Schritten. Die größten Schwierigkeiten hatte ich mit dem Konvertieren von .shp File nach .kml. Da hat mir dann jedoch das Onlinetool mygeodata.cloud gut geholfen.

Das .kml wird dann ich Qlik Sense wie eine normale Geo-Datei eingelesen und im Kartenobjekt als Dimension benutzt.

[Rind]:
LOAD
 [rind.Name] as Teilstück,
        [rind.Name],
 [rind.Point],
 [rind.Area],
 [rind.Line]
 FROM [lib://shapefile_result/rind.kml]
(kml, Table is [rind/rind]);


Ansonsten habe ich mich mit eine paar Dingen beschäftigt, die ich in anderen Blogposts gefunden habe - und fertig ist das Qlik Sense BBQ :-)

1) Das Thumbprint Bild der Qlik Sense Applikation/Reiters kann ein animiertes .gif sein.
Eigentlich der pure .gif Horror, aber vielleicht ein gutes Feature um die Aufmerksamkeit von Anwendern auf einen bestimmten Reiter zu lenken :-)





2) Emojis in Tabellen einbauen
Qlik Sense Feb 2020 hat einige Improvments bei Table Indicators bekommen. Für Qlik Sense June 2020 erwarten wir Sparklines in Tabellen. In dieser Spaßapplikation haben wir Emojis für die Zubereitungsarten(Grillen ... 🔥) benutzt.


3) Hintergrundbild ohne Qlik Sense Theme

Qlik Sense Themes müssen als Extensions auf den Qlik Sense Server installiert werden. Manchmal will man nur eine Kleinigkeit - wie zum Beispiel ein Hintergrundbild für genau einen Reiter - ändern. Vielen Dank für diese kleine Zauberei an Dennis Jaskowiak von Qlik. Anstatt ein Qlik Sense Theme zu bauen, nutze ich am ersten Reiter das Multi KPI-Objekt um ein paar Styles zu setzen.

#grid-wrap { 
background: url("http://content.heldendaten.eu/glowing2.jpg");background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
background-size: cover;
position: absolute;
}
.qv-object-text-image {
background-color:  rgba( 1 , 1 , 1 , 0.55) !important;
}

div[tid=hnWD] {
opacity: 0;
}

div[tid=vQSHxMD]{
background-color:rgba(255,255,255,0.85);
}

}

Im Multi KPI Objekt hier die Styles eintragen.



Die Objekt-IDs findet man über Rechtsklick/Diagramm Einbetten. Um das Multi-KPI Objekt selbst zu verbergen, habe ich den Style opacity: 0; gesetzt.



Die Qlik Sense Applikation zum Download finden Sie hier. Am Reiter About finden Sie gesammelt alle Infos zu der Applikation.

Die Qlik-Funktionen Fractile und FractileExc

In 12 Jahren Qlik kann ich mich nicht erinnern, dass eine neue mathematische Funktion in den Release Notes erwähnt wurde. Mit Qlik Sense Nov 2019 SR3 und dem QlikView 12.50 hat sich das geändert: Willkommen FractileExc() Funktion!

Während es in Qlik schon immer eine median() und eine fractile() Funktion, durften sich Excel User bereits in der Version 2010 über zwei Funktionen verschiedene Quantil-Funktionen QUANTIL.INKL und QUANTIL.EXCL freuen.

Zur Erinnerung: die median Funktion liefert das gleiche wie die fractile(0.5) Funktion. Der Median ist jener Wert, der die höhere Hälfte der Werte von der niedrigeren Hälfte der Werte einer Datenreihe separiert. Je nach Verteilung kann dieser Wert sehr unterschiedlich liegen, und auch von anderen Mittelwerten abweichen.


Quantile für Normalverteilung und chi-Quadrat Verteilung



Warum also eine neue Funktion? Unter dem Titel "Die statischen Excel-Funktionen QUANTIL.INKL und QUANTIL.EXKL" findet sich eine schöne Abhandlung des Bloggers Gerhard Pundt. Die dort benutzte Datenserie, wollen wir in Qlik ebenfalls als Datenquelle nutzen.


Qlik Sense Nov 2019 SR3 FractileExc
FractileExc liefert für das 25% und 75% Quantil andere Werte als die Funktion Fractile


Die Ergebnisse für das 25% und 75% Quantil unterscheiden sich also zwischen der Fractile und der FractileExc Funktion. Qlik folgt den Excel Funktionen QUANTIL.INKL und QUANTIL.EXCL und liefert die gleichen Werte wie das Beispiel im oben genannten Blogpost.

Die Erklärung was FractileExc nun für eine mathematische Funktion ist, liefert das erste Kommentar von spaghettieisblog. Es verweist auf Wolfram Mathworld, wo 8 verschiedene Berechnungsmethoden für Quantile genannt werden.




Demzufolge gilt:

QlikExcelWolfram
FractileQUANTIL.INKLQ7
FractileExcQUANTIL.EXCLQ6 Weibull Quantil


Warum QlikView die Funtion FractileExc nun einige Monate später bekommen hat, beruht wohl auf der Tatsache, dass Qlik Sense und QlikView 12.X die gleiche Engine als Codebasis haben. Ähnlich wie bei der sortable Aggr oder autonumber using Funktion tauchen solche Engine Features mit etwas Versatz auch im folgenden QlikView Release auf.

Qlikview 12.50 FractileExc
Hier die FractileExc Funktion in QlikView 12.50


Die .qvf und .qvw findet sich hier.

Karten Features im Qlik Sense Geo Objekt

Das Coronavirus zeigt im Internet gerade wieder wie aufschlussreich man mit Geodaten Zusammenhänge darstellen kann. Auch in der Qlik Community gibt es einige Dashboards die sich dem Thema Coronavirus widmen.

Coronavirus COVID-19 | Qlik Community Response
Coronavirus COVID-19 | Qlik Community Response

Ich will mich in diesem Blogpost ein paar generellen Features widmen, die das Qlik Sense Geo Objekt in den letzten Versionen erhalten hat.


Web Map Service (WMC) Hintergründe

Ein Web Map Service (WMS) ist eine Schnittstelle zum Abrufen von Auszügen aus Landkarten über das World Wide Web.  Spielt man das Beispiel aus der Qlik Hilfe durch, kann man sich sehr einfach eine Qlik Karte erzeugen, die Wassertemperatur und Niederschlagsmenge anzeigt. Wenn notwendig, kann auf zusätzlichen Ebenen eigentlich Daten aus dem Qlik Datenmodell angezeigt werden. In diesem Beispiel wären das die Hauptstädte der Bundesstaaten als rote Punkte.

WMS WassertemperaturNiederschlagsmengen kombiniert mit einem Qlik Sense Punktlayer
WMS Wassertemperatur & Niederschlagsmengen kombiniert mit einem Qlik Sense Punktlayer


Die Stadt Wien etwa stellt über die WMS URL https://data.wien.gv.at/daten/geo unzählige Informationen bereit, die als Hintergrund des Qlik Sense Karten Objekts genutzt werden können. Hier ein Beispiel das alle Krankenhäuser, Polizeistationen und Apotheken anzeigt.

WMS Service der Stadt Wien mit Krankenhäuern, Polizeistationen und Apotheken
WMS Service der Stadt Wien mit Krankenhäuern, Polizeistationen und Apotheken



Im Qlik Sense Edit-Modus kann auf der rechten Seite via "WMS-Einrichtung" gewählt werden, welche Informationen gerade angezeigt werden sollen.

WMS Service - Ebenen wählen
WMS Service - Ebenen wählen


Die Stadt Wien stellt so mehr als 100 Geoinformationen zu Verfügung, die Sie beliebig kombinieren können. Sie suchen einen Campingplatz in Wien in einem Biosphären-Park oder an einem stehenden Gewässer?  Kein Problem, einfach die Layer in Qlik Sense auswählen, und die Daten werden angezeigt.

Campingplätze in Wien's Biospährenpark
Campingplätze in Wiens Biosphärenpark


Bild als Hintergrund

Steht einem kein Webservice zu Verfügung, hat man im einfachsten Fall nur eine starre Bilddatei als Hintergrundkarte. Das bringt uns zu einem Feature, dass wir im Blog schon 2014 für QlikView vorgestellt hatten. Damals war es die Kabinenbelegung auf einem Kreuzfahrtschiff, in Qlik Sense wäre das Beispiel Supportmitarbeiter in einem Großraumbüro.

In der Qlik Hilfe ist dieses Bild als Sitzplätze im Großraumbüro verlinkt: https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Resources/Images/ui_map-image-background-example.png

Auf dem Bild überlegt man sich ein Koordinaten System, dass man im Qlik Script zu den Supportmitarbeitern mappt.

Will ich etwa den Mitarbeiter "Nehru" vom kleinen Besprechungstisch auf den großen Tisch setzen,

so muss man seine "Koordinaten" im Script anpassen.




Karte mit Graphikebenen

Seit einigen Versionen kann Qlik Sense neben den klassischen Punkt- und Gebietsebenen auch noch verschiedene Graphikebenen wie Kreisdiagramme, Balkendiagramme, Density Maps und Linienlayer.

Verschiedene Ebenen im Geo Objekt
Bei Kreisdiagrammen steht einem eine zusätzliche Dimension zur Verfügung, nach der man den eigentlichen Geo-Datenpunkt aufreißen kann. Im Beispiel unterhalb wird pro Postleitzahl noch zusätzlich das Feld Kategorie aufgerissen.

Die Postleitzahl aufgerissen nach Category. Der Tooltip zeigt absulte und relative Werte
Die Postleitzahl aufgerissen nach Category. Der Tooltip zeigt absolute und relative Werte

Einstellungen auf der Diagrammebene

Eigenes Symbol als Punktebene

Zu guter Letzt noch ein Feature aus dem aktuellen Qlik Sense Feb 2020 Release. In der Punktebene ist es nun möglich auch eine eigene Graphik als Punkt zu definieren.

Die französische Flagge als Bild Symbol auf der Punktebene
Die französische Flagge als Bild Symbol auf der Punktebene


Die Beispiele von oberhalb finden Sie hier. Die Demo zu Qlik Feb 2020 finden Sie direkt auf demo.qlik.com,

Volltextsuche & Wordcloud in Qlik

Qlik bietet eine Volltextsuche über alle Felder. Aber kann man Qlik auch nutzen, um zum Beispiel alle Supporttickets oder Kundenfeedbacks nach Keywords zu durchsuchen und die Häufigkeit in einer Wordcloud darstellen? Der Artikel unterhalb beschreibt wie es funktioniert.

Word Cloud Qlik
Wordcloud in Qlik 

Das Qlik auch die Häufigkeit von Millionen Wörter darstellen kann habe ich schon 2015 hier unter Qlik Sense Smart Data Compression beschrieben.

Aber wie bekommt man aus einem längeren Text die einzelnen Wörter extrahiert, um etwa zu zählen wie oft ein Wort in Supportcases vorkommt?

Die Inputdaten für das Beispiel



Hier ist die Subfield Funktion von Hilfe.

//load data
[Data]:
LOAD
 [Supportcase],
        //replace line breaks with blanks
 replace([Text],chr(10),' ') as Text 
    
 FROM [lib://data/supportcases.xlsx]
(ooxml, embedded labels, table is Tabelle1);

//Split into Words
TempAllWords:
Load
[Supportcase],
trim(subfield([Text],' ')) as Words
resident [Data];


Nach dem Splitten der Wörter kann man noch Satzzeichen entfernen. Zusätzlich kann man ungewünschte Füllwörter wie Pronomen, Artikel usw. entfernen, indem man ein Excel mit den irrelevanten Wörtern pflegt.

AllWords:
NoConcatenate
load 
[Supportcase],
upper(Words) as Words,
applymap('IrrelevantWords',upper(Words),'relevant') as Relevanz
where len (Words) > 0;
load
[Supportcase],

(if(match(right(Words,1),'.',',','!','?',';') > 0, left(Words,len(Words)-1),Words)) as Words  //cleanup 
resident TempAllWords;


Was dieser Ansatz nicht macht, sind Volltextsuchen-Features wie Stemming  um alle Wörter auf Ihren Wortstamm zu reduzieren. Hier könnte man die Server Side Extensions von QlikView und Qlik Sense nutzen, und die Wörter noch durch ein Python Skript für Stemming laufen lassen.

Die Wordcloud Darstellung selbst kommt mit dem Qlik Sense Visualization Bundle. Bitte auf die Sortierung und die Design|Orientation achten.

Qlik Sense Word Cloud nach Häufigkeit sortieren
Word Cloud nach Häufigkeit sortieren


Qlik Sense Word Cloud Orientations
Wordcloud Orientations auf 3


Als weiterführendes Thema kann man Sentiment Analyse betreiben. Viele Kunden haben automatisch die Qlik Sense WebConnectors lizensiert. Dort gibt es zwei Konnectoren die hier interessant sein können. Bei Gelegenheit werde ich dazu einen eigenen Blogpost schreiben.


Das komplette Beispiel zum Download findet sich hier

Qlik Sense Variance Waterfall für Bestände

Ab Qlik Sense Sept 2019 kommt im "Visualization Bundle" das Variance Waterfall Chart mitinstalliert. Die Darstellung ist viel dynamischer als das normale Wasserfalldiagramm, weil man nicht für jeden Balken eine eigene Expression schreiben muss.

Für normale YTD-Darstellungen in einer Vertriebsapplikation ist das Chart recht Straight Forward. Das Variance Waterfall Chart nutzt die gleichen Formeln wie das normale Wasserfalldiagramm, und läuft zusätzlich über das "Monat"-Feld. Im Beispiel unterhalb sieht man so auf einem Blick, dass die Monate Jänner, Februar und März noch besser als das Vorjahr waren, bevor sich dann in den Folgemonaten der Umsatz YTD schlechter entwickelt hat.

Qlik Sense Wasserfall Variance
Mit den YTD und YTD Vorjahr Formel zeigt das Variance Waterfall die Umsatzenwicklung nach Monaten aufgerissen!

Zuletzt hatten wir jedoch eine Anforderung mit diesem Charttyp die Veränderung von Beständen darzustellen. Beispiele dafür wären: Lagerbestände, Entwicklung Anzahl Kunden pro Monat, usw.

Für diese Anforderung scheint das Chart nicht unbedingt geschaffen, weil es das Konzept von Start-Bestand und End-Bestand nicht wirklich kennt, und es keine Differenz zum Vormonat bildet. Man sieht das ganz gut, wenn man sich den Javascript Code der Extension von Qlik  ansieht.

Wieder hilft uns aber ein Workaround den wir schon für die Sparklines im Climber KPI Objekt  (mittlerweile in das kommerzielle Vizlib aufgegangen) vorgestellt hatte. Mittels dimensionality(), below() und firstsortedvalue() kann man auch diese Anforderung darstellen. Die Formeln sind nur ein wenig komplizierter. Zum Test gibt es die Werte rechts als Tabelle.

Über zwei Jahre entwickelt sich der Lagerstand von 700.000 auf 670.000



STARTFORMEL:

rangesum(FirstSortedValue(distinct   aggr(nodistinct sum(Bestand),Monat), Monat,1),-0)



ENDFORMEL:
if (dimensionality() = 0,
 //Höhe Balken Zielmonat
 rangesum(FirstSortedValue( distinct   aggr(nodistinct sum(Bestand),Monat), -Monat,1))
,
 //Wert des Vormonats
    alt(
       below(
        rangesum(FirstSortedValue( distinct   aggr(nodistinct sum(Bestand),Monat), -Monat,1),-0)
        ,1)

     ,
 
        //im letzten Monate keinen Unterschied zeichnen
        rangesum(FirstSortedValue( distinct   aggr(nodistinct sum(Bestand ),Monat), -Monat,1))
    )

 )



Als Dimension nutzen wir ein eigenes Feld "MonatWasserfall" welches um ein Monat zum tatsächlichen Datum verschoben ist. Damit ist die Beschriftung dann schlüssiger.


Weil Bestände oft sehr hoch, und die Veränderungen verhältnismäßig klein sind können, haben wir auch noch die Funktion eingebaut, dass sich ein Anwender selbst den Skala-Start definieren kann. Gibt er in das Inputfeld 400.000 ein, sieht das Chart folgendermaßen aus, weil die Y-Achse nicht mehr bei 0 beginnt.


Variance Waterfall mit Y-Achse Start auf 400.000


Gibt der User gar keinen Wert ein, dann wählen wir mit der Formel =if(len(vSkala)=0, min (aggr(sum(Bestand),Datum)) * 0.95 ,vSkala) den Skalenwert dynamisch und geben ihn als Fußnote aus.



Dynamischer Y-Achse Startpunkt


Alternativ zur vorgestellten Lösung könnte ein As-Of-Ansatz im Datenmodell funktionieren wo immer das Vormonat "mitselektiert" wird. Das bleibt zu testen. Wer für unsere Lösung herausfindet wie man den letzten roten Balken im Jänner 2021 mit dem Wert 0 loswerden kann, darf sich gerne melden :-)

Der Download zum Qlik Sense Beispiel findet sich hier.
heldendaten GmbH,2020