Reuse Section Access in NPrinting

Wenn man seine QlikView und Qlik Sense Section Access Berechtigungen in NPrinting wiederverwenden will, ist leider die Dokumentationslage ein wenig dünn. Im Qlik STT Video "Qlik NPrinting User Management & Security" wird das Thema ganz am Ende bei den Q&A kurz behandelt: Ja, NPrinting supported Section Access. Dieser Blogpost zeigt wie es gemacht wird!

Der "UserDACH" bekommt auch im PDF-Report nur Deutschland, Österreich, Schweiz zugesendet


Die Anleitung unterhalb zeigt wie der Section Access aus QlikView bzw. Qlik Sense in NPrinting wiederverwendet werden kann, ohne manuelles Anlegen von User Filtern  in  der NPrinting Console.



1) Section Access wird in QlikView und Qlik Sense im Script definiert. Unser Demouser ist "VPS1264656\UserDACH",  und darf drei Länder Deutschland, Österreich, Schweiz sehen .

Den NPrinting-Serviceuser (in unserem Fall VPS1264656\QVSERVICE) hier als ADMIN ohne Einschränkung hinzufügen.

NPrinting Section Access Qlik Sense Script

 
2)  Loggt sich der "UserDACH" in die Applikation ein, sieht man wie der Section Access auf die drei Länder einschränkt. Genau die gleiche Einschränkung soll der User bei seinen NPrinting Reports haben.

Die Funktion "=osuser()" zeigt uns den eingeloggten User. Das sieht in Qlik Sense ein wenig anders aus als in Qlikview, zeigt aber prinzipiell genauso die Domain und den Usernamen.


NPrinting Section Access Qlik Sense

3) Damit der User einen NPrinting Bericht erhalten kann, muss er in NPrinting angelegt bzw. aus dem ActiveDirectory importiert werden. Wichtig ist, dass das Feld "Domain Account" danach ein "Valid NT Domain User" ist, weil über diesen Usernamen der Section Access angewendet wird.

NPrinting Section Access User Domain Account

4) Beim Anlegen der Connection, muss man den Haken "Apply user section access for reports" anhaken. Als Identity tragen wir den NPrinting-Serviceuser VPS1264656\QVSERVICE ein. 

NPrinting Section Access Connection

5) Den NPrinting Report wie gewünscht designen. Am besten auch eine Textbox mit osuser() auf den Bericht ziehen, damit man das Ergebnis validieren kann.

6) Die Recipients des Berichts hinzufügen. Damit mappt der NPrinting User "UserDACH" auf  den Domain User "VPS1264656\UserDACH". Das gleiche gilt für UserAT und UserDE -  und so bekommt jeder der 3 User seinen maßgeschneiderten Report
NPrinting Section Access Recipients
7) Der Benutzername kann dynamisch in der Email gesetzt werden

NPrinting Section Access Email Template

 8) Wenn Sie den Task nun anstarten, bekommt jeder User seinen "Section Access" geschneiderten Report in die Mailbox geliefert. Die osuser()-Funktion zeigt, dass Section Access greift.

NPrinting Section Access 3 different Reports








Qlik Sense Theme - Zebra Striped Tables & Pivots

Seit Qlik Sense Februar 2018 gibt es die Möglichkeit eigene Themes für Qlik Sense zu bauen. Diese Woche habe ich eine interessante Frage bekommen: kann man die Zeilen in Tabellen und Pivottabellen alternierend einfärben um die Lesbarkeit zu erhöhen? JA, kann man!

Qlik Sense Default Objekte with Zebra stripes
Die Tabellen mit alternierend weißen und grauen Zeilen in Default Qlik Sense Objekten
Aus QlikView kennen wir das Feature einfach als Einstellung beim Objekt. In Qlik Sense gibt es dieses Property nicht, dafür hat man natürlich den Vorteil, dass man den Qlik Sense Webclient über CSS steuern kann.

QlikView vs. Qlik Sense Zebra Stripes
QlikView Stripes vs. Qlik Sense Table

Wie man Zebra Stripes mit CSS definiere kann findet man unter w3schools.com. Als Ausgangspunkt für ein Qlik Sense Theme habe ich das QDT-Theme vom Qlik Demo Team hergenommen. Dort sieht man in der theme.css bereits einige Styles definiert. Zusätzlich habe ich folgendes eingefügt.

css for Qlik Sense zebra stripes
.css Anweisung für Zebra Stripes
Das .zip File mit dem modifizierten Theme steht hier zum Download.

Um das Theme am Qlik Sense Server zu deployen, das .zip File in der QMC als Extension importieren.



Dann kann das Theme "qdt theme" über die Qlik Sense App Settings eingestellt werden.



Voilà - alle Tabellen werden jetzt schön gestreift dargestellt! Sogar wenn man das Balkendiagramm rechtsklickt und sagt "Daten anzeigen", wird die Tabelle gestreift. Das hat sogar mich positiv überrascht :-)





Folgende .css ergänzt auch ein Hovering, damit man die markierte Zeile besser sehen kann
 .qv-object-content-container .qv-object-content table tr:hover {
          background-color: #ffff99;
 }


Qlik Sense - QMC und Hub CSS Farbe setzen

Wer viele Tabs in seinem Browser offen hat, und zudem noch mehrere Qlik Sense Systeme (DEV, TEST, PROD) sein Eigen nennt, ist wohl manchmal verwirrt welche Qlik Sense Umgebung er gerade nutzt.

Leider gibt es kein direktes Feature um die verschiedenen Umgebungen farblich klar zu trennen, aber man kann sich die .css von QMC und HUB mal genauer ansehen.

Qlik Sense Hub und QMC in rot gefärbt

Als Helferlein dient hier am besten das Dev Tool in Chrome, welches man mittels F12 einblenden kann. Mit dem DOM-Inspektor sieht man, dass etwa die qmc.css den Style "qmc-toolbar" setzt.


Nicht ganz offensichtlich ist, wo denn die qmc.css im Filesystem liegt. Das war in Qlikview einfacher, weil wir den IIS/QVWS mit klaren Mountpoints hatten. Für den Qlik Sense Proxy Service findet man die Datei unter: C:\Program Files\Qlik\Sense\Client\qmc.css

Dort kann man zum Beispiel "Background-color: red;" für den Style "qmc-toolbar"einfügen.


.css Änderung bewirkt roten Balken in QMC



Für den Hub liegt die Datei unter C:\Program Files\Qlik\Sense\Client\hub\hub.css.  Dort ist es der Style "hub-toolbar".


Die .css ist komprimiert, und somit unangenehmer zu editieren. Wer aber zum Beispiel mit notepad++ nach "hub-toolbar{" sucht, sollte auch schnell fündig werden.





.css Änderung bewirkt roten Balken in Hub


QlikView Geo Karten - Mapquest statt Static.OpenstreetMap.de

Alle paar Jahre passiert es wieder. Die Scatterchart Kartenintegration von QlikView mit Open Streetmap liefert kein Hintergrundbild mehr.

Es scheint diesmal leider so, als ob Open Streetmap den Dienst für diese API im September 2018 endgültig eingestellt hat.




Google Maps für interne Nutzung ist meines Wissens nach nicht gratis. Die kommerzielle Lösung teuer. Eine "freie" Alternative ist die MapQuestAPI:

='http://www.mapquestapi.com/staticmap/v4/getmap?key='&yourmapquest_key&'&type=map&size='&def_map_size&','&def_map_size&'&pois=&center='&Replace(var_mid_lat,',','.')&','&Replace(var_mid_long,',','.')&'&zoom='&$(var_zoom)&'&rand=1212384919'


Bitte den API-Schlüssel generieren, dann haben Sie zumindest 15.000 Kartenzugriffe im Monat gratis.



Scatterchart mit Hintergrundgraphik via MapQuest

Die neue URL und Key hier eintragen:


Ein Beispiel mit einem Demo-Key findet sich hier in der Qlik Community https://community.qlik.com/docs/DOC-6225 

Um diese wiederkehrende Problematik ein für alle Mal zu lösen, und auch die Möglichkeiten der GeoAnalysen in QlikView auf ein neues Level zu heben, empfehlen wir die Extension NPGeoMap. Dort wird das Kartenmaterial mitgeliefert bzw. über die normalen Tile-Server von zB OpenStreetmap geladen. 

Siehe Infos auf unserer Webseite unter https://www.heldendaten.net/qlikview-npgeomap

Wetterdaten von OpenWeatherMap mit Qlik

Aktuelle Wetterdaten mit den eigenen Unternehmensdaten zu verknüpfen, kann zu ganz neuen Schlussfolgerungen führen. Sei es im Handel, in der Produktion oder wenn Sie Verkehrsströme mit Qlik auswerten.

Qlik Datamarket liefert zwar Wetterdaten, aber für Österreich sind da einfach nicht genügend Städte hinterlegt. Als Alternative haben wir uns OpenWeatherMap.org angesehen.

OpenWeatherMap mit dem aktuellen Forecast von Wien.

OpenWeatherMap bietet eine Vielzahl an APIs, die neben dem aktuellen Wetter auch historisches Wetter, Forecast, Luftverschmutzung, usw. abdecken.

Um das Service nutzen zu können, muss man sich registrieren und einen API Key herunterladen, der dann im Qlik Script als Parameter gesetzt werden muss. Für unsere Anwendung reicht die kostenfreie Version, die bis zu 60 Abfragen (== aktuelles Wetter von 60 Städten) pro Minute zulässt. Für mehr Requests, oder aktuellere Wetterdaten kann man kostenpflichtige Modelle wählen.

OpenWeatherMap liefert die Daten in unterschiedlichen Formaten. Für eine Default Qlik-Umgebung eignet sich entsprechend XML. Um also die Wetterdaten von allen Hauptstädten in Österreich abzurufen, können Sie folgendes Qlik Script nutzen.

$(must_Include=apikey.txt);


for each vCity in 'Graz','Vienna','Eisenstadt','Linz','Klagenfurt','Eisenstadt','Bregenz','Innsbruck','Salzburg'

Wetter:
LOAD 
     '$(vCity)' as City,
 [lastupdate/value],
    [weather/number] as number,
    [weather/value],
    [weather/icon] as icon,
    [precipitation/mode] as mode,
    [visibility/value],
    [clouds/value],
    [clouds/name],
    [wind/direction/value] as [direction/value],
    [wind/direction/code] as code,
    [wind/direction/name] as [direction/name],
    [wind/speed/value] as [speed/value],
    [wind/speed/name] as [speed/name],
    [pressure/value],
    [pressure/unit],
    [humidity/value],
    [humidity/unit],
    [temperature/value],
    num(num(num#([temperature/value],'###.##','.',' '))- 273.15) as [temperature/value_Celsius],
    [temperature/min] as min,
    [temperature/max] as max,
    [temperature/unit],
    [city/id] as id,
    [city/name],
    [city/country] as country,
    [city/sun/rise] as rise,
    [city/sun/set] as set,
    [city/coord/lon] as lon,
    [city/coord/lat] as lat
FROM [http://api.openweathermap.org/data/2.5/weather?q=$(vCity),AT&appid=$(vAPIKey)&mode=xml] (XmlSimple, Table is [current]);
//&units=metric --> liefert nicht immer Wert

next




let vHour=num(hour(now(1)),'00');
let vDate = date(today(),'YYYYMMDD');

store Wetter into  ./qvd/Wetter_$(vDate)_$(vHour).qvd;

drop table Wetter;



Das Ergebnis liefert Temperatur, Wind, Luftfeuchtigkeit, Bewölkungsgrad, Sonnenauf- und untergang und sogar die Längen- und Breitengrade zu den Städten. Neben den Städtenamen kann man auch andere Queryparameter wie Postleitzahl und Geokoordinaten nutzen. Bei unseren Tests hat der OpenWeatherMap-Parameter "unit=metric" nicht so funktioniert wie unter "Unit Formats"
dokumentiert, deswegen haben wir die Umrechnung von Kelvin auf Grad Celsius im Qlik Script gelöst.



Die geladenen Wetterdaten in QlikView

Die Historisierung der Wetterdaten machen wir in Qlik selbst, indem wir für jeden Skriptlauf eine eigene .qvd wegspeichern. Wenn Sie also in der Qlik QMC die Beladung auf "stündlich" stellen, kann man sich so sogar einen Tagesverlauf abbilden.


Das Scriptbeispiel funktioniert in QlikView und Qlik Sense mit Legacy Script Modus. Für Qlik Sense Standard Modus muss man die neue URL Syntax nutzen und das Skript entsprechend adaptieren. Bitte den eigenen API-Key in die Variable "vAPIKey" eintragen.

Kontinuierliche X-Achse in Qlik Sense (updated June 2018 Release)

Still und heimlich hat sich ein altes QlikView Feature auch in den Charteinstellungen von Qlik Sense eingefunden: die kontiniuierliche X-Achse. Hat man viele Datenpunkte in einer Zeitreihe und nur einen beschränkten Darstellungsraum, will man möglichst den gesamten Zeitverlauf auf einem Blick sehen.

In QlikView kennen wir diese Einstellung schon lange. Hier ein Beispiel mit den Qlik DataMarket Wetterdaten für Wien.

QlikView kontinuierliches Kombichart
Temperatur und Niederschlagsverlauf in Wien 2014-2015 als kontinuierliches Kombichart


In Qlik Sense gab es in den ersten Versionen diese Einstellung gar nicht. In Qlik Sense 3 kam dann erstmals das Liniendiagramm, jetzt in Qlik Sense 3.1 SR4 haben auch Kombichart und Balkendiagramm das Setting bekommen.

Links die alten Darstellungen. Rechts die Darstllung mit der kontinuierlichen X-Achse
Während man in den linken Charts immer nur wenige Datensätze sieht (und dann scrollen muss), sieht man in den rechten Charts den gesamten Zeitraum - verdeutlicht mit der SQRT-Funktion.

Das Setting um die kontinuierliche X-Achse zu aktivieren
Wie Oleg Troyansky in seinem Blogpost geschrieben hat, funktionieren die kontinuierlichen Charts  in Qlik Sense zusammen mit einem Derived Kalenderfeld als "Time-Aware" Charts. Aber Achtung: bei großen Datenmengen dürften die Derived Fields einen großen Overhead haben.

Beide Applikationen für QlikView und Qlik Sense gibt es hier zum Download.

Update August 2018 

Mit Qlik Sense June 2018 kann jetzt auch das MiniChart für die Kontinuierlichen Charts abgedreht werden.






Qlik Sense April und June 2018 Release - Mehr am Grid

Wer die Releasenotes & What's New von Qlik Sense April 2018 aufmerksam gelesen hat, hat vielleicht bemerkt, dass nun die Gridgröße für das Positionieren der Objekte am Arbeitsblatt geändert werden kann (Eigenschaften des Arbeitsblatts - Gitternetzabstand - Eng|Mittel|Weit).

Nach der Installation kommt aber die große Enttäuschung -  das funktioniert nur für Arbeitsblätter die man neu in Qlik Sense April 2018 erstellt! Bevor Sie jetzt alle bestehenden Arbeitsblätter umbauen, bitte noch ein paar Tage Geduld: mit dem Qlik Sense June 2018 Release kann man die Gridgröße jetzt auch auf bestehenden Arbeitsblättern ändern.

Und noch viel besser: man kann das Arbeitsblatt erweitern. Also vertikal Scrollen lassen. Damit kann man nun viel mehr Objekte auf einem Reiter positionieren.

Hier vorab ein animiertes .gif vom Technical Preview!


Wer einen Qlik Community User hat, kann sich das Technical Preview hier herunterladen! Vor allem der "Insight Generator" ist eine fundamentale Änderung um noch schneller an ein Self Service Dashboard zu kommen. PS: wenn Sie in June 2018 Release einen ganz normalen Filter an die Oberfläche ziehen wollen, dann ist die SHIFT-Taste Ihr Freund :-)







Vorjahre und aktuelle Monatssummen in einem Balkendiagramm

Manchmal sind unsere Kunden mutiger als wir selbst. Wir erhielten die Anfrage, ob man in Qlik die zwei Vorjahre und die aktuellen Monatsperioden in einem Chart gemeinsam darstellen kann.

Zwei Vorjahre und die aktuellen Perioden (verschobenes Geschäftsjahr) in einem gemeinsamen Chart


Intuitiv hätte ich gesagt "NEIN, eher nicht", weil JAHR und MONAT zwei verschiedene Dimensionen sind.

In QlikView hätte man natürlich die Möglichkeit zwei Charts nebeneinander zu schummeln, aber spätestens beim Export wäre das Negativ aufgefallen. Die zweite Möglichkeit die mir Adhoc eingefallen wäre, wäre eine Formel für jede einzelnen Balken zu schreiben. Das ist aber aufwändig und in Kombination mit den gewünschten Stacked Bars auch nicht ohne weiteres möglich. Eine Lösung im Datenmodell wäre wohl machbar, ist aber immer extra Arbeit.

Der Kunde ist dann selbst mit einer sehr interessanten Lösung auf uns zugekommen, die ich hier vorstellen möchte. Unterhalb das Ergebnis als animiertes .gif - in der Qlik Sense Applikation sind zwei Balkendiagramme. Im oberen Balkendiagramm werden die Monatswerte einzeln dargestellt, im unteren Balkendiagramm sind die Monatswerte akkumuliert (Dezember 2017 zeigt das Gesamtjahresergebnis). Die Tabelle rechts dient zur Validierung der Zahlen.



Die Lösung besteht aus zwei Teilen: Einer dynamischen Dimension, und einer etwas komplexeren Formel.

Die dynamische Dimension:

=if(GetFieldSelections(Jahr,',')=Jahr, 
monthname(Bestelldatum),dual(Jahr,makedate(Jahr,12,31)))

Die Formel prüft welches Jahr der User gewählt hat, und zeigt für eben dieses die Monatsnamen an. Das Dual im ELSE-Zweig stellt sicher, dass die Sortierung der Balken sinnvoll ist.

Die Chart-Formel selbst überschreibt dann mit Set Analysis die Jahresselektion, damit alle 3 Jahre angezeigt werden:

sum({<Jahr=>} Anzahl*Einzelpreis)


Ein wenig komplexer wird die Formel für das untere Barchart, weil wir die einzelnen Monate akkumulieren wollen.

if(GetFieldSelections(Jahr,',')=only(Jahr), 

    rangesum( 
     if(month(Bestelldatum) = 1,
             0, //Im Jänner nicht above nehmen
             above([Jahr Monat Umsatz Aggregiert])
        ),      
        sum(Anzahl*Einzelpreis)
    ),
    sum({<Jahr=>} Anzahl*Einzelpreis) //nicht selektierte Jahre
)

Interessant hier, dass man in der Formeldefinition mit "Jahr Monat Umsatz Aggregiert" wieder rekursiv auf die Master Item Bezeichnungsformel zugreifen kann.

Qlik Sense Master Item
Rekursive Definition des Master Items über die "Bezeichnungsformel"


Achtung: Auf einer Qonnections hat das Qlik Scalability Team davor gewarnt, dass  dynamische Expressions mit mehr als einem Feld den Qlik Server Cache brechen. Bei sehr großen Applikationen kann es also CPU-hungrig werden! Bitte vorab testen!

Ein Beispiel für Qlik Sense findet sich hier. Für QlikView funktioniert der Trick genauso!


Qlik Sense - Dashboards (Offline) am IPhone

Mit dem Qlik Sense February 2018 Release gibt es jetzt Qlik Sense am IPhone - Online und Offline. Wer also Qlik Sense mal schnell testen möchte - einfacher war es noch nie! Unterhalb die Schritt für Schritt Anleitung!


1) Im AppStore nach "Qlik Sense Mobile suchen"


2) App Starten und den Demo Hub wählen. Für die Offline Funktionalität auf die 3 Punkte beim "Executive Dashboard" drücken.


3) Herunterladen wählen


4) Qlik Sense App wird auf das IPhone heruntergeladen


5) Offline öffnen

6) Die App-Übersicht

7) Reiter "KPI Dashboard" wählen 

8) Freie Selektion in der Offline Applikation

 9) Der gesetzte Filter wird oben rechts hervorgehoben. Wechsel auf den Reiter "Sales Analysis"


10) Der Beweis: wir sind im Flugmodus ohne WLAN. Qlik Sense funktioniert komplett Offline am IPhone!

Wenn Sie Ihre eigenen Applikationen am IPhone oder am IPad bereitstellen wollen, benötigen Sie einen Qlik Sense Enterprise Server! Bei Fragen stehen wir gerne zur Verfügung!

Sparklines auf Qlik Sense KPI Dashboards

Einer meiner Lieblingsextensions ist das Climber KPI Objekt. Das Qlik Sense KPI Objekt ist OK, aber mit dem Climber Objekt hat man weit mehr Einstellungsmöglichkeiten wenn es Dashboard-Design geht.  Außerdem hat es auch ein Trendline Feature, welches man sehr schön + platzsparend für Sparklines nutzen kann!

Das Default KPI Objekt zeigt nur 2 Kennzahlen an! Ob das "Ziel" erreicht wurde oder nicht, kann man nur mit einer Farbe, aber nicht mit einem Icon untermauern. Will man außerdem einen Verlauf  über die letzten Monate anzeigen, so muss man ein extra Balken- bzw. Liniendiagramm ergänzen. Das ist nervig - und sogar gefährlich - vor allem wenn man das Responsive Design am Smartphone in Betracht zieht!

Am Computer kann man die Balken noch als Sparkline für den Umsatz nutzen..

.. am Smartphone ist das Balkendiagramm aber unterhalb der Frachtkosten-KPI

Besser klappt es mit dem Climber KPI-Objekt! Hier kann der Trend direkt im gleichen Objekt angezeigt werden! Das spart Platz am Grid und macht keine Probleme mit dem Responsive Design.

Was allerdings interessant ist, dass die Climber-Entwickler keine eigene Formel für die Sparkline bereitstellen. Man muß die gleiche Formel wie für die Kennzahl nutzen. Das macht es schwierig, wenn man:

  • Umsatz des aktuellen Monats als Kennzahl
  • Verlauf über die letzten Monat als Sparkline
darstellen will.

Mit folgender Formel kann man es aber doch schaffen:

firstsortedvalue({<Monat={"<=$(=addmonths(max(Monat),0))"}>} distinct 
   aggr(nodistinct 
        Sum({<Monat={"<=$(=addmonths(max(Monat),0))"}>} Anzahl*Einzelpreis) 
   ,[Monat]),
-Monat,1)

Für die angedruckte Kennzahl wird also das "aktuelle"=="letzte" Monat durch firstsortedvalue geholt. Lässt man die Sparkline im Climber KPI Objekt über die Monate laufen, bekommt man in jedem Monat den korrekten Wert.

Hier die Objekte in der direkten in der Gegenüberstellung:

Links mit Default Qlik Sense Objekten - auf der rechten Seite: mit Climber KPI



Am Smartphone funktioniert das Objekt auch wunderbar, weil es eben eine gemeinsame Darstellung ist!






Das Climber KPI Objekt bietet unterschiedliche Darstellungen des Trends. Siehe unterhalb auf der rechten Seite die Möglichkeiten.



Insgesamt also eine tolle Sache. Falls jemand eine einfachere Formel findet, bitte gerne posten :-)


Die Qlik Sense Applikation finden Sie hier zum Download!
heldendaten GmbH,2017