Set Analysis Einführung – Nur bestimmte Filter freigeben

In Teil 1 haben wir kennen gelernt wie man Filter (Modifier) nutzt um die ersten einfachen Ausdrücke zur erstellen. 

Hier wollen wir anknüpfen: 

Gehen wir davon aus das Sie ein Dashboard erstellen wollen auf dem die Werte nur noch auf eine Region und ein Quartal eingeschränkt werden sollen.

In der letzten Einführung haben wir dieses durch die Angabe des Feldes erledigt sum({  $ < Jahr={2018}, Monat={Jan} > } Umsatz).

Diese Methode ist aber ehr ungeeignet um nur einige Felder freizugeben.

Hier ist es sinnvoller erst mal alle Felder mit dem Identifier 1 zu sperren und dann Einzeile Felder wieder freizuschalten. Dies erreichen Sie mit der Notation Feld=$::Feld

Kommen wir zurück zum obigen Beispiel, Sie wollen nur die Filter Region und Quartal für Ihre Formel nutzen:

sum({  $ < Region=$::Region, Quartal=$::Quartal > } Umsatz)

Im nächsten Beitrag werden Sie erfahren wie Sie Operatoren und + und – nutzen.

 

 

Set Analysis Einführung – Operatoren Plus und Minus

Fangen wir mit den Operatoren + und – an:

Gehen wir von einen der ersten behandelten Ausdrücke aus:

sum({  $ < Jahr={2017} > } Umsatz) 

lieferte uns nur die Werte aus dem entsprechendem Jahr. Wenn Sie nun einen der Operatoren + oder – wählen fügen Sie das entsprechende Jahr der Auswahl immer hinzu oder entfernen es wieder.

sum({  $ < Jahr={2017} > } Umsatz) 

Wenn Sie das Jahr 2017 auswählen erhalten Sie für diesen Ausdruck 0, wenn alle Jahre ausgewählt sind ist das Jahr 2017 nicht enthalten. 

sum({  $ < Jahr+={2017} > } Umsatz) 

Hier Wiederrum spielt es keine Rolle ob 2017 ausgewählt ist oder nicht, es ist immer in der Summe des Umsatzes enthalten.

Sie wollen alle Kunden selektieren die mit A anfangen aber Arnold ausschließen:

sum({  $ < Kunde={„A*“} – {‚Arnold‘} > } Umsatz) 

Sie wollen alle Kunden selektieren die mit A anfangen und auch den Kunden Donald

sum({  $ < Kunde={„A*“} + {‚Donald‘} > } Umsatz) 

Set Analysis Einführung – Identifier

sum(Umsatz) 

zeigt den Umsatz abhängig von den Filtern an, Standard Verhalten.

Was ist Set Anlysis?

Mit Set Analysis können Sie der obigen Formel einen Filter mitgeben, so das dieser gesetzt ist,  ohne das man diesen an der Oberfläche selektiert.

Sie wollen z.B in einer Kennzahl eine feste Region anzeigen oder das aktuelle Jahr mit dem Vorjahr berechnen.

Wie ist Set Analysis aufgebaut?

wir gehen erneut von unserer Grundformel sum(Umsatz) aus. Um Set Analysis einzuleiten müssen Sie diese Grundformel wie folgt erweitern:
sum({  Identifier  } Umsatz).

Als Identifier haben Sie folgende Möglichkeiten:

1 = Filter ignorieren

sum({  1  } Umsatz)
Wenn Sie  1 als Identifier wählen ist, erhalten Sie unabhängig von den Filtern, immer den gesamten Umsatz über alle Werte. Sie erhalten das gleiche Ergebnis wenn Sie statt den Ausdruck {1} das Schlüsselwort ALL nutzen sum(ALL Umsatz).

$ = weitere Filter zulassen

sum({  $  } Umsatz)
Wenn Sie nur  $ als Identifier wählen ist die Erweiterung erst mal wirkungslos weil er das gleiche Ergebnis wie sum(Umsatz) liefert.

Filter (Modifier)

bleiben wir nun bei diesem Ausdruck sum({  $  } Umsatz)  um diesen Ausdruck nun sinnvoll zu gestalten müssen wir mindestens einen Filter mitgeben. Diese geschieht wie folgt
sum({  $ <Filter={Filterwert}>  } Umsatz).

weiterlesen

Alle Filter mit zwei Filterboxen

Formel für den ersten Filter: $Field

Formel für den zweiten Filter: =’$(=only($Field))‘

Formel für das Label: =only($Field)

Sie können sich im Script auch eine kleine Helfertabelle anlegen um nur bestimmte Dimensionen anzuzeigen:

Load * Inline [
MeineDimensionen
Dim1
Dim2
//usw
];

Die Formel würden dann so aussehen:

Formel für den ersten Filter: MeineDimensionen

Formel für den zweiten Filter: =’$(=only(MeineDimensionen))‘

Formel für das Label: =only(MeineDimensionen)

 

Excel Datein laden HowTo 1

BeispielTabelle.xls:

A B C
Item A Value 1 10
Item A Value 2 20
Item B Value 3 30
Item C Value 4 40

Problem

Sie wollen nur die Zeilen laden in denen in Spalte A „ItemA“ und „ItemC“ vorkommt.

Lösung

Nutzung eines Where Statements welches auch beim laden von Excel Dateien genutzt werden kann.

Load A,B,C From BeispielTabelle.xls 
Where A = 'ItemA' or A = 'ItemC';

Ergebnis

A B C
Item A Value 1 10
Item A Value 2 20
Item C Value 4 40

 

weiterlesen

Eigene Gruppe in den Proberties

Um eine eigene Gruppe innerhalb des Accordions für Ihre Extension zu erstellen nutzen Sie folgenden Code: 

define(["qlik", "jquery",'ng!$q'],

function ( qlik, $, $dict, $q) {
  'use strict';
  var MeineGruppe = {
    component: "expandable-items",
    label: "MeineGruppe",
    items: {
       // Reguläre Items aus der Hilfe ...
       // Siehe URL unten
    }
  };

  // Reguläre Settings
  var Settings = {
    uses: "settings",
    items: {
      general: {
        items: {
          showTitles: {
            defaultValue: false
          }
        }
      }
    }
  }
  
  return {

    type: "items",
    component: "accordion",
    items: {
      cSection: MeineGruppe,
      settings: Settings

    }
  };
} );

Um innerhalb des Beispiel Codes weitere Punkte hinzuzufügen folgen Sie diesem Link:

https://help.qlik.com/en-US/sense-developer/September2018/Subsystems/Extensions/Content/Sense_Extensions/extensions-reusing-properties.htm

Variablen- und Feldliste in Extension Proberties

Um Variablen oder Felder in einer Qlik Extension zu nutzen müssen in der define ng!$q nutzen um innerhalb der Proberties auf die Promises von Qlik zugreifen zu können.

Beispiel:

define(["qlik", "jquery",'ng!$q'],

function ( qlik, $,  $q) {
	'use strict';

// Your Code

}

Funktion um die Variablenliste zu erhalten:

var getVariableList = function(){
  var defer = $q.defer();
  app.getList( 'VariableList', function ( items ) {
  defer.resolve( items.qVariableList.qItems.map( function ( item ) {
	return {
		value: item.qName,
		label: item.qName
		}
	} )
       );
     } );
  return defer.promise;
}

weiterlesen

Variablen setzen

Egal ob Extension oder Mashup.

Sie müssen beim setzen von Variablen entscheiden ob der Wert als ZAHL oder STRING gespeichert werden soll. Da in HTML aber immer alles erst mal STRING ist können Sie folgende kleine Funktion nutzen um Zahlen auch als zahlen zu speichern.

function setVariable( name, val, useString = false) {
  if ( !app ) { app = getQlikApp(); }
  if(useString === true) { app.variable.setStringValue(name,val);
  } else {
    if(!isNaN(val)) app.variable.setNumValue(name, parseFloat(val));
    else app.variable.setStringValue(name,val); 
  }
}

Qlik Farben im Mashup ändern

Als erstes benötigt man ein eigenes Template.

Dieses ist schnell im Extension Ordner erstellt:

Extensions/myMashupTheme

1. myMashupTheme.qext
2. theme.json

Inhalt der MashupTheme.qext:

{
	"name": "myMashupTheme",
	"description": "custom theme for myMashup",
	"type": "theme",
	"version": "1.0.0",
	"author": "Thomas Lindackers"
}

Inhalt der theme.json: 

https://help.qlik.com/en-US/sense-developer/September2018/Subsystems/Extensions/Content/Sense_Extensions/CustomThemes/custom-themes-properties.htm

Die komplette Liste der Proberties findet man ganz unten auf der Seite.

Innerhalb des Mashups kann man das Theme mit folgenden Code anwenden:


qlik.theme.apply('myMashupTheme').then(function(result){

});

Nutzt man nun die Visualisierung API oder bindet Charts ein deren Farben nicht über die KPIs bestimmt werden, ändert man so die Farben.

Berechnng nur einmal ausführen

Es kommt immer wieder vor, das man für die Vorbelegung von Werten wie (z.B. min max Berechnung für die Einstellung eines Schiebregelers) nur eine einmalige Berechnung benötigt.

Erstellt man mit Hilfe des genericObjects eine Berechnung, wird diese allerdings bei jeder Selektion erneut ausgeführt. Dies kann zu unerwünschten Flackereffekten führen.

Um dieses Problem zu lösen können Sie das Session Objekt nach der Berechnung einfach entfernen, somit wird die Berechnung nur einmal ausgeführt.

Beispiel:


app.createGenericObject(JSON.parse('{' + genStr + '}'), function ( reply ) {
// Berechnung 
app.destroySessionObject(reply.qInfo.qId);
});

JavaScript Datum in Qlik Format umrechnen

Mit der folgen Funktion kann man ein JavaScript Date() in das Qlik Sense / View Format konvertieren:


function Date2QlikDate(aDate){
var nDate = new Date(aDate); 
var nMonth = nDate.getUTCMonth() +1; 
var nDay = nDate.getUTCDate() +1;
var nYear = nDate.getUTCFullYear();
// DMY to Modified Julian calculated with an extra subtraction of 2415019 - 153 for Q.
var nSerialDate =
parseInt(( 1461 * ( nYear + 4800 + parseInt(( nMonth - 14 ) / 12) ) ) / 4) +
parseInt(( 367 * ( nMonth - 2 - 12 * ( ( nMonth - 14 ) / 12 ) ) ) / 12) -
parseInt(( 3 * ( parseInt(( nYear + 4900 + parseInt(( nMonth - 14 ) / 12) ) / 100) ) ) / 4) +
nDay - 2415019 - 32075 - 153;

if (nSerialDate < 60) {
// Because of the 29-02-1900 bug, any serial date
nSerialDate--;
}
return nSerialDate;
}

Qlik Sense – nützliche Extensions

Hier mal eine Liste der Extensions welche mir bis her keine Probleme beim Einsatz bereitet haben und welche Sense um viele wertvolle Funktionen ergänzen:

  1. Alternate States (Alternative Auswahlräume für Qlik Sense).
    Der Partner Akquinet stellt diese Extension kostenlos zur Verfügung. Es handelt sich hierbei im Gegensatz zu den anderen Extensions zu diesem Thema um eine funktionierende Variante. 
    https://github.com/q2g/q2g-ext-alternatestates
  2. Customer Report (Self Service Pivotierung)
    Climber Custom Report ist eine Extension die Ihnen erlaubt eine Pivottabelle zu erstellen, in welcher der Endanwender die Dimension und Formel für die Tabelle selber auswählen kann ohne in den Berabeitungsmodus zu wechseln. 
    http://branch.qlik.com/#!/project/57cd3f80cc816d99d6cbd4b6

  3. Variablen Eingabe an der Oberfläche
    Für die Eingabe von Variablen ist die bekannteste Extension „qsVariable“ diese Extension ist auch eine der ersten Certified Extension. Die Extension finden Sie hier: 
    http://branch.qlik.com/#!/project/56728f52d1e497241ae697f8

    Ich möchte Sie an dieser Stelle auch auf meine eigene Extension zu diesem Thema aufmerksam machen, bnQSInput diese erhalten Sie hier: 
    http://branch.qlik.com/#!/project/5ac921580f9f4d1cc1e0c168
    Vorteile meiner Extension vs qsVariable: MultiSelect / kann mit führenden Nullen umgehen / RangeSlider / Vorbelegung der Werte durch ein Feld etc.
    Eine entsprechende Certified Extension werde ich für diese in kürze beantragen.

    weiterlesen

Mashups & Extensions – Einstieg

# Extensions

Einen guten Einstieg zu diesem Thema bietet mein Kollege Stefan Walther an, es handelt sich hierbei um ein Tutorial mit entsprechenden Code Beispielen: https://github.com/stefanwalther/qliksense-extension-tutorial

Des weiteren finden Sie eine umfassende API Dokumentation unter:
Beachten Sie hierbei bitte die entsprechende Release Nummer in der URL.
 
(Weitere Beispiele und Hilfe folgen)
 

# Mashups
Der einfachste Einstieg in die Welt der Mashups ist der Einsatz von jQuery UI. Mit Hilfe dieses Frameworks  können Sie schnell und einfach Benutzergeführte Analysen erstellen.  Die Komponenten welche über jQuery bereit gestellt werden lassen sich sehr einfach mit Qlik Sense verknüpfen. Ein entsprechendes Training finden Sie hier Link, der Kurs ist entgegen der Beschreibung in der Regel in Deutsch.
 
 
# Wissen
HTML / CSS / JavaScript: http://selfhtml.org
Web Standards erfüllen: https://www.w3.org
 
 
# Frameworks
jQuery: http://selfhtml.org  
jQueryUI: https://www.w3.org 
anychart: https://www.anychart.com
 
# Tools und Umgebung
Maen Stack: http://mean.io
 
 

Formelsammelung mit einer Excel Datei

Um eine Formelsammlung sinnvoll zu nutzen empfehle ich folgenden Weg:

Aufbau der Excel Datei:

Name Value Desc usedTable
sumLineSalesAmount sum(LineSalesAmount) Summe der Umsätze Facts
sumLineCosts sum(LineCostOfGoods) Summe der Kosten Facts
sumCataloguePrice sum(CataloguePrice) Summe der  Products

 

Die Formelsammlung würde ich zu einem gesamten Datenmodell erstellen, die letzte Spalte in der oberen Zeile kann dann genutzt werden um nur für die im Projekt benutzen Tabellen die Formeln zu generieren.
Sprich die letzte Zeile wird dann nicht geladen und dient nur der Einschränkung.

Zum Einschränken nutze ich in der Regel ein Where usedTable =’Facts‘ or  usedTable = ‚Products‘  etc.

Die restlichen Felder würde ich alle laden, so können Sie diese als Tabelle in QlikView angezeigt werden, so sind diese direkt auch Dokumentiert und für jeden Benutzer schnell einsehbar.

Um die Daten aus der geladen Tabelle zu generieren  benötigen Sie dann folgendes Script:

 

Variables: 
LOAD 
  Name, 
  Value,
  Desc
FROM
[$(Path)Expressions.xls]
(biff, embedded labels, table is Sheet1$);
; 
FOR i=0 TO NoOfRows('Variables') 
  LET vVar = Peek('Name', $(i), 'Variables'); 
  LET vVal = Peek('Value', $(i), 'Variables'); 
  LET '$(vVar)' = '$(vVal)'; 
NEXT

Dieses Script sollten Sie dann auslagern und immer wieder per include im Script einbinden, oder Sie nutzen den Weg über eine QVD.

siehe auch:

Rolling 12 Month

Hier mal ein Beispiel wie man mit Variablen und Set Analysis abhängig von der Auswahl im Kalender 1 Jahr zurück geht.

  1. Variablen mit Gleichheitszeichen anlegen!

vYTDStartDate =AddMonths(min({1<Jahr=$::Jahr,Monat=$::Monat>} Datum), (year(max({1<Jahr=$::Jahr,Monat=$::Monat>} Datum)) – year(min({1<Jahr=$::Jahr,Monat=$::Monat>} Datum)) + 1) * – 12)

vYTDEndDate =AddMonths(max({1<Jahr=$::Jahr,Monat=$::Monat>} Datum), (year(max({1<Jahr=$::Jahr,Monat=$::Monat>} Datum)) – year(min({1<Jahr=$::Jahr,Monat=$::Monat>} Datum)) + 1) * – 12)

vYTDPeriod =‘>=‘ & Year(vYTDStartDate) & num(Month(vYTDStartDate), ’00‘) & ‚<=‘ & Year(vYTDEndDate) & num(Month(vYTDEndDate), ’00‘)

  1. Vergleich der Kennzahlen erfolgt dann mit folgender Formel:

sum({<Jahr=, Monat=, JahrMonat={„$(=vYTDPeriod)“}>} [Kennzahl])

Cycle Groups with Sense Mashup V1

CaptureCycle
CaptureCycle2

HTML eine Selectbox welche die Werte enthält:

<div class="qvOverlay" style="right:10px"> <i class="fa fa-refresh"></i> 
<select class="changeDimension" id="vDimensionField"> 
<option value="MonthYear"> Month Year</option> 
<option value="Year"> Year </option> 
<option value="QuarterYear"> Quarter Year </option> 
<option value="Month"> Month </option> 
<option value="CompanyName"> Customer </option> 
<option value="ProductName"> Product </option> </select>
</div>

CSS-Code:

bei Bedarf anpassen Overlay hat bei mir einen höheren z-index als das Chart und ist absolut rechts oben ausgerichtet

JS (man kann über die ID den VariablenNamen mitgeben):

$( ".changeDimension" ).change(function() { 
var str = ""; 
$('#' + $(this).attr('id')+" option:selected" ).each(function() { 
  str += $( this ).val(); }); 
  app.variable.setStringValue($(this).attr('id'), str); 
});

Qlik:

1 Variable vDimensionField
1 Chart was als Dimension =[$(vDimensionField)] enthält fertig 🙂

Wie QlikView das Script liest

QlikView liest das Load Skript innerhalb eines Registerblattes von Oben nach unten ein und die Registerblätter von links nach rechts.

Nachdem das Skript eingelesen wurde, wird dies allerdings nicht, in der exakten Lesereihenfolge ausgeführt. Innerhalb einzelner Blöcke wird hier das Script von unten nach oben verarbeitet.

Ein Block endet immer nach dem jeweiligen FROM oder RESIDENT Befehl.

Hier einige kleine Beispiele wie QlikView das Script abarbeitet:

  weiterlesen

Try and Error

Der Begriff wurde von Herbert Spencer Jennings und W. Holmes geprägt. Demnach wird ein Organismus durch Antrieb/Motivation sensibel für Hinweisreize, um sich die als angenehm eingestufte Entspannung zu verschaffen. Um zu dieser Entspannung, also zu diesem Ziel zu gelangen, werden vom Organismus mehrere Wege ausprobiert (Versuch). Erfolglose Versuche werden nach Edward Lee Thorndike als Irrtum (error) bezeichnet; bei erfolgreichen Versuchen wird das Erreichen des Zieles als Wirkung bezeichnet. …


In der Informatik finden sich viele algorithmische Verfahren, die auf dem Versuch-und-Irrtum-Ansatz beruhen. Dazu gehören klassische BacktrackingAlgorithmen, die rekursiv eine Menge von möglichen Lösungen durchsuchen, bis eine richtige Lösung gefunden wird.

Viele Optimierungsverfahren iterieren nach dem Grundsatz Versuch und Irrtum.

Quelle: http://de.wikipedia.org/wiki/Versuch_und_Irrtum.

Dieses Verfahren lässt sich auch auf QlikView übertragen und Sie haben sogar noch den großen Vorteil das ein Irrtum hier meist nur kleinere Auswirkungen hat wenn Sie folgende Dinge beherzigen: weiterlesen

Sinnvolle Namenskonventionen

In vielen Büchern und in vielen Schulungen bekommt man den Tipp Felder entsprechend zu kennzeichnen, was auch nicht verkehrt ist. Allerdings wird hier in der Regel den Feldnamen ein entsprechendes Zeichen vorangestellt und das ist der Punkt den ich als nicht sinnvoll erachte. Ich gehe hier nur einmal von Feldnamen und Variablennamen innerhalb von QlikView aus. Dort findet man oft Konstrukte wie  

Sales_Name
Sales_Nachname
Sales_usw.

für Felder oder 

vVariable1
vHeute
vUsw

Das Problem bei dieser Schreibweise ist das Sie diese Variablen nicht mehr durch drücken der entsprechenden Buchstaben erreichen. Drücken Sie z.B. die Taste „N“ in einer Feldliste werden Sie nicht bei Sales_Name landen obwohl Sie nach einem Namen suchen.

weiterlesen

Icon Fonts – performante Bilder fürs Web

Icon Fonts sind Schriftarten die nur kleine Bilder sogenannte Icons statt Buchstaben, Ziffern etc. darstellen, ähnlich wie die bekannte Schriftart Webdings die man aus Word kennt.

Vorteile dieser Methode:

  • voll skalierbar
  • in der Farbe über Schriftfarbe anpassen
  • kleiner als eine Reguläre Bilddateien in entsprechenden Größen

es gibt bereits fertige Font Icon Sets im Web hier zwei der bekanntesten Beispiele:

Wie sie die entsprechenden Schriftarten per CSS einbinden erfahren Sie auf den jeweiligen Seiten. Sie können aber anhand von SVG Dateien auch eigene Icon Fonts erstellen, hierzu gibt es im Web entsprechende Generatoren:

https://www.google.de/#q=icon+font+generator

Beachten Sie das Sie auf den meisten Seiten ihre Icons automatisch für andere freigeben, um den Service nutzen zu können. Sie können also auch auf diesen Seiten weitere Icon Fonts herunterladen.

Nutzen Sie allerdings nicht zu viele verschiedene Webfonts auf einmal, da sonst wieder ihre Ladezeiten steigen. Der Vorteil dieser Methode liegt nämlich darin, dass Sie statt vieler kleiner Dateien nur eine laden was eleganter und schneller ist, hinzu kommen die oben genannten Vorteile.  weiterlesen