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.

heldendaten GmbH,2017