Document Extension - Kommentare mit Link hinterlegen

QlikView bietet zu jedem Objekt in der Titelleiste ein Kommentar-Feld an. Dieses Feld ist sehr praktisch um kurze Erklärungen zu jedem Objekt zu verfassen. Wer aber komplexere Informationen hinterlegen will, würde vielleicht gerne auf eine Wiki-Seite mit detaillierter Dokumentation verweisen.

Leider interpretiert QlikView im Kommentarpopup keine Hyperlinks. Ein Klick auf das Kommentar-Popup schließt dieses, und man kehrt zu QlikView zurück. QlikView bietet uns im Full Browser/AJAX-Client ab Version 11 eine schöne Möglichkeit dieses Verhalten zu ändern: Document Extensions.

Document Extensions sind GUI-lose Modifizierungen, mit denen man das Verhalten des AJAX-Clients abändern kann. In der folgenden Document Extension wollen wir also anstatt das Popup zu schließen, lieber dem Hyperlink zu unserer Detaildokumentation folgen!

Für den Anwender

Für den Anwender kann das also wie folgt aussehen (eine Livedemo finden sie unter demo.heldendaten.net):

1) Normales QlikView Verhalten: Das Kommentar wird bei MouseOver als Tooltip angezeigt


 2)  Klickt man das Icon erscheint wie gewohnt das Popup!


3)  Ohne Document Extension würde sich beim Klick das Popup wieder schließen. Mit Document Extension öffnet sich der Link der im Kommentar unter spitzen Klammern steht: http://en.wikipedia.org/wiki/Bar_chart


Document Extension

Was ist passiert? Technisch läuft beim Öffnen der Applikation ein kleiner Javascript Code der sich zum Klick-Event des Kommentar-Popups hängt.

Qva.AddDocumentExtension('HD_ClickCommentExtension', function() {
       
    //Add Pointer-Cursor to class QvMessagePopup table 
    $("").appendTo("head");
    
    $("body").on("click", ".QvMessagePopup table", function(event){
        var comment = $(this).text();
        var URL = "";
        //extract URL from Comment 
        //Text between < >  is interpreted as URL
        URL = comment.substring(comment.indexOf('<') + 1,comment.indexOf('>'));
        //Check if it's a valid URL
        if(/^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i.test(URL)){
          //Open new tab
          window.open(URL);
        }
        else
        { if (URL.length > 0)
            alert("Sorry, no URL");
        }
    });
  
});
Findet die Dokument-Extension im KommentarText eine URL in spitzen Klammern (<URL>), dann öffnet es beim Klick mit window.open() die Seite.

Wie bekommt man die Document Extension in die .qvw?

Eine Document Extension ist genauso ein .qar-Packet wie herkömmlichen Extensions. Ein Doppelklick auf die Extension führt die Installation im QVDeveloper durch.
Um die Document Extension in die .qvw hinzuzufügen, muß man den Menüpunkt "Eigenschaften des Dokuments|Tab Erweiterungen" aufrufen. Dort kann man die installierte Document Extension als "Aktive Erweiterung" definieren.


Damit funktioniert die Extension im WebView-Modus des QlikView Developers. Um die Extension für alle Benutzer am Server verfügbar zu machen, muss man sie am Server unter den Defaultpfad entpacken: C:\ProgramData\QlikTech\QlikViewServer\Extensions\Document\HD_ClickCommentExtension







Qlikview 11.20 SR2 unter Windows 2012

Alle die unseren QlikView RoundTable in Wien besucht haben, hatte ich ja schon erzählt, dass Windows 2012 einen schönen Vorteil mit sich bringt: Die 32GB MemoryGrenze der Windows 2008 R2 Standard-Edition ist gefallen! Windows 2012 Standard Edition erlaubt einen Arbeitsspeicher von bis zu 4TB (also ein ziemlich großer QlikView Server :-))

Memory-Obergrenzen Windows 2012 zu Windows 2008 R2


Wer also gerade über eine Erweiterung seines QlikView-Servers auf >= 64GB nachdenkt, oder eine Migration zu QV11 durchführen will, sollte mal einen Blick auf Windows 2012 werfen, bevor man unnötig Lizenzkosten in Windows 2008 Enterprise Edition investiert.

Mittlerweile ist auch QlikView 11.20 SR2 erschienen, das einen offiziellen Support für Windows 8, IE 10 und Windows 2012 bringt. Grund genug das wir uns eine entsprechende Testumgebung aufbauen. Unter folgendem Link finden Sie die Downloads von Oracle Virtualbox sowie einer fertigen .VHD-Datei von Microsoft Windows 2012 (mit einer 180 Tage Testversion).

Sind die Downloads erledigt, und die .VHD-Datei gemounted, muss man noch einige Einstellungen (Sprache, Admin-Passwort) am Windows 2012 vornehmen.

 Nach einem Neustart läuft dann Windows 2012, und wir können die QlikView Setups herunterladen.

Achtung: sowohl für Windows 8 als auch Windows 2012 gibt es hierfür eigene Installationspakete auf der QlikView Webseite. Siehe Screenshot unterhalb! Die Setups gibt es ausschließlich für 64bit!



Qlikview 11.20 SR2 Desktop


Die Installation von QlikView Desktop funktioniert anstandslos. Nach der Installation erscheint der QlikView-Button auf der neuen Kachel-Oberfläche. Startet man QlikView von dort, erscheint das gewohnte Look&Feel. Sowohl der normale Modus, als auch WebView scheinen zu funktionieren. Vorherige QlikView-Versionen hatten ja gerade in Kombination Internet Explorer 10 und Webview noch ihre Einschränkungen!


QlikView Developer

QlikView Developer im Webview Modus

QlikView 11.20 SR2 Server


Die Serverinstallation verlief ebenfalls problemlos. .NET 4.0 schien unter Windows 2012 bereits vorhanden, erforderte also keine extra Installation. Das einzig Nervige war mal wieder die Internet Explorer Enhanced Security: diese lässt sich aber wieder im (neugestaltetem) Server Manager deaktivieren:


Wie unter Windows 2008 erlaubt die Installation auch wieder die Wahl zwischen "Lokaler QlikView Administrator-Gruppe" und "Use digital certificates" (unter Win2003 gabe es diese Option ja nicht). Der Einfachheithalber blieb ich auch unter Windows 2012 bei der "QlikView Administrator" Gruppe. 


Der obligatorische Restart nach der Installation bleibt erhalten. Das Lizensieren von QlikView Server und QlikView Publisher über die QlikView Management Console ebenfalls.

Ruft man danach den Accesspoint auf, ist alles wie gehabt. Defaultmäßig öffnet der "Full Browser Version" (== AJAX) Client die Applikationen.


Einzig der About-Reiter zeigt uns, dass QlikView nun erfolgreich auf Windows 2012 läuft: Microsoft Windows NT 6.2.9200.0









Lessons Learned 2012 - Indexed Time Series Chart

Ende Mai wird es langsam spät für "Lessons Learned" aus dem Vorjahr, aber die "Indexed Time Series Chart" Darstellung wollte ich auf unserem Blog noch vorstellen :-).  Die konkrete Anforderung war: Man will die Umsatzentwicklung mehrerer Filialen prozentuell ab einem Stichtag X gegenüberstellen. So will der Benutzer ablesen, welche Filialen eine gute Umsatzentwicklung hingelegt haben, und welche hinterherhinken.

Ein Liniendiagramm mit absoluten Zahlen ist hier schwieriger zu interpretieren: eine direkte Gegenüberstellung von "umsatzstarken" Filialen zu kleineren Filialen lässt sich aufgrund der Skalierung schwer umsetzen. Das folgende Bild zeigt einen alten Datenbestand von Yahoo Finance aus dem Jahr 2009. Welche Aktie sich gut entwickelt hat ist kaum zu erkennen. Der Kurs der "Immofinanz" ist im Vergleich zur "Vienna Insurance" soviel niedriger, dass die Skalierung kaum eine Interpretation über die Aktienkursentwicklung zuläßt.


Eine bessere Darstellung für unsere Anforderung wäre, den Stichtag 01. Juli 2009 für alle Aktien mit 100% zu indizieren, und dann die prozentuelle Entwicklung über die Zeit zu betrachten. Die Kollegen von qvdesign haben dazu einen schönen Blogeintrag mit Beispiels .qvw anhand des "Big Mac Index" gebastelt.

Das Prinzip angewandt auf unsere Daten zeigt: Die Immofinanz hat sich im gewählten Zeitraum mit Abstand am Besten entwickelt.


Als Dimension dient hier das Datum und der "Name" der Aktie.  Technisch interessant ist aber vor allem die Formel die in QlikView benutzt wird:

sum(Close)/(sum(total <Name> if(Date=min(total Date),Close)))
Der Dividend sum(Close) ist noch klar: Close ist die Kennzahl die hier dargestellt werden soll.

Der Divisor ist der spannende Teil: Um aber pro Aktie/Filiale/Name immer auf den ersten Tag (= die 100%) referenzieren zu können muss man QlikView mit dem "total <Name>"-Qualifier aus der eigenen Chart-Dimension herausspringen lassen und dann mit "Date=min (total Date)" das erste Datum pro Name holen.



Alle meine bisherigen Lösungen für diese Art Darstellung hatten Einschränkungen, und sind entsprechend nicht zu empfehlen:

sum(Close)/firstsortedvalue(total<Name> Close,Date)
> Funktioniert nur, wenn es pro Tag genau einen Close-Wert gibt!

sum(Close)/sum({$<DateX={$(vMinDate)} >} if (SymbolX = Symbol,CloseX))
> Mit Set Anaylsis mußte ich die Faktentabelle nochmal als "Lookup" laden. Schon mit kleinen Datenmengen langsam.
Das Beispiel findet sich unter: http://content.heldendaten.eu/indexedtimechart.zip
PS: leider funktioniert das Datenladen von YahooFinance scheinbar nicht mehr! Deswegen dieser alte Datentopf!







QlikView - Hardware Server Settings For Best Performance



QlikView auf einem physischen Server zu betreiben ist die ideale Wahl. Diesen physischen Server dann auch noch richtig zu konfigurieren - das kann wichtig sein um das Maximum aus Ihrer gekauften Hardware herauszuholen.

Das QlikView Scalability Center hat dafür einen entsprechenden "Quick tip" veröffentlicht. Wie Sie sehen können, werden folgende BIOS-Settings empfohlen:
  • Hyperthreading zu deaktiveren, und 
  • Node Interleaving Node Interleaving zu aktivieren (das bedeutet NUMA deaktivieren)
Update 18.06.2013

QlikTech hat folgende Information bezüglich Hyperthreading und NUMA gepostet:
Hyper-threading
Disabled (most architectures), Enabled (2 socket Intel E5-XXXX architectures)
Since 11.2 SR2: QVS is defaulted to an automated state that detects NUMA status and set EnableNumaRoundRobin setting in accordance to recommendations.

http://community.qlikview.com/docs/DOC-2362
Häufig haben wir aber gar nicht den Zugriff auf den Server, da dieser in einem Rechenzentrum steht. Wie also die aktuellen BIOS-Einstellungen herausfinden? Microsoft bietet mit  Windows SysInternal CoreInfo ein kleines, aber feines Commandline-Tool wo man diese Informationen auslesen kann:




Mein Laptop zb. hat Hyperthreading aktiv. Wäre er ein QlikView Server, so sollte ich es im BIOS deaktivieren. Läßt sich Node Interleaving im BIOS nicht aktivieren, gibt es einen Software-Switch für die QVS Settings.ini (siehe "Quick tip" ):

For some servers there is no support for disabling NUMA. Since QV10 SR4 and QV11 any version there is a soft switch within QV that can be used to remove/reduce performance penalty from NUMA. It is recommended to use this setting for machines that does not have support for disabling NUMA.
The setting is not in the QMC and must be set in the Settings.ini file as a [Settings 7] entry
EnableNumaRoundRobin=0 is defaulted and means disabled functionality.

Also bevor Sie das nächste Mal Stundenlang Skripte und Formeln optimieren, stellen Sie bitte zuerst sicher, daß Ihr physischer Server optimal konfiguriert ist!  Der Quick Tip wird öfter mal upgedatet - wer also am Laufenden gehalten werden möchte, einfach in der Qlikcommunity anmelden und die "Email-Benachrichtigung" für diese Seite aktivieren!


Übrigens:
Virtualisierung funktioniert häufig gut, manchmal aus diversen Gründen (Memory Balloning, zu wenig garantierte CPU-Zeit) nicht, bringt aber sicherlich IMMER Performance-Einbüßen durch den zusätzlichen Overhead mit sich. QlikTech hat aber prinzipiell nichts gegen Virtualisierung. Hier  findet sich auf der VMWare-Homepage sogar ein QlikTech Support Statement.

QlikView Easter Egg - Das Entwicklungsteam

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

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

Version 7 & 8 - scheinbar das Bild aus Qlikview 6

Version 9 und aufwärts

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

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

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

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

heldendaten GmbH,2020