QlikWorld 2020 Global Conference. Nehmen Sie teil, um zu erfahren, wie Sie Ihre Daten optimal nutzen können. Zögern Sie nicht. Registrieren Sie sich jetzt zum günstigeren Preis.

Semantische Verknüpfungen

Normalerweise wählen Sie Werte per Mausklick direkt in einem Objekt aus, häufig in einer Listbox. Es gibt aber auch eine Möglichkeit, Werte indirekt auszuwählen, und zwar durch semantische Verknüpfungen. Diese sehen auf den ersten Blick aus wie normale Werte, beschreiben aber Beziehungen zwischen Objekten und nicht Objekte selbst. Semantische Verknüpfungen werden in QlikView durch ein Paket von Schaltflächen dargestellt.

Per Mausklick auf eine sematische Verknüpfung werden Werte in anderen Feldern ausgewählt.

Semantische Tabellen

Hinweis: Semantische Tabellen werden in der Tabellenansicht nicht angezeigt.

Semantische Verknüpfungen entstehen durch Laden von semantischen Tabellen, die Informationen über die Relationen zwischen Objekten enthalten. Für semantische Tabellen gilt:

  • Die Tabelle enthält entweder drei oder vier Spalten.
  • Die Tabelle enthält entweder Relationen zwischen den Werten zweier verschiedener Felder oder Relationen zwischen den Werten desselben Feldes. Eine Kombination dieser beiden Funktionen ist nicht möglich.
  • Dem LOAD oder SELECT-Befehl, der die semantische Tabelle lädt, muss der Zusatz semantic vorangestellt werden, damit sie nicht als interne Tabelle interpretiert wird.

Normalerweise werden vier Spalten verwendet: Die erste enthält die Feldwerte, die einen Bezug zu anderen Feldwerten haben, und die dritte enthält den bezogenen Feldwert. Die zweite Spalte muss die Namen der Bezüge enthalten. Die vierte Spalte muss schließlich die Namen der Umkehrrelationen enthalten.

Wird nur mit drei Spalten gearbeitet, gibt es keine Bezeichnung für die Umkehrrelation. In diesem Fall wird der Name der Relationen für Relation und Umkehrrelation benutzt. Den Namen werden dann Pfeile vorangestellt oder angehängt.

Bestehen die Relationen zwischen den Werten desselben Feldes, tragen die erste und die dritte Spalte der semantischen Tabelle denselben Namen. Ebenso die zweite und die vierte Spalte, da die Relation dieselbe ist. Besteht die Relation jedoch zwischen Werten unterschiedlicher Felder, tragen alle Spalten der semantischen Tabelle unterschiedliche Namen.

 Generieren einer semantischen Tabelle aus Daten

Die semantische Tabelle muss nicht immer in einer Tabelle außerhalb von QlikView existieren. Es ist meist einfacher, diese Tabelle durch einen zusätzlichen LOAD-Befehl aus den bestehenden Daten zu generieren.

Im Beispiel presidents im Verzeichnis QlikView Beispiele könnte das Skript zur Generierung der Links Predecessor und Successor folgendes sein:

Directory presidents;

LOAD * from presdnts.csv (ansi, txt, delimiter

is ',', embedded labels);

Semantic LOAD

No -1 as No,

'Successor' as Relation,

No,

'Predecessor' as Relation

from presdnts.csv (ansi, txt, delimiter is ',',

embedded labels) where No > 1;

Der zweite LOAD-Befehl erstellt in QlikView eine semantische Tabelle wie rechts dargestellt. Die where-Bedingung schließt den ersten Datensatz aus, denn sonst würde der erste Präsident mit einem nicht existierenden nullten Präsidenten verknüpft.

Beachten Sie auch, dass der LOAD-Befehl zwei Felder mit Namen No und zwei Felder mit Namen Relation definiert. Ein derartiger LOAD-Befehl würde einen Fehler in der Skriptausführung verursachen, wenn er zum Laden einer internen Tabelle verwendet wird, da der Ladevorgang für eine einzelne interne Tabelle voraussetzt, dass keines der Felder den gleichen Namen hat. Genauso verhält es sich, wenn Daten durch einen SELECT-Befehl geladen werden, denn die meisten ODBC-Treiber akzeptieren keine doppelten Feldnamen. Wären die Daten der Präsidenten in einer Datenbank gespeichert, müsste das Skript folgendermaßen aussehen:

Connect to DataBase;

SELECT * from presdnts;

Alias No2 as No, Relation2 as Relation;

Semantic SELECT

No -1 as No,

'Successor' as Relation,

No as No2,

'Predecessor' as Relation2

from presdnts where No > 1;

Die Datei über die US-Präsidenten ist nur ein Beispiel für die Anwendung semantischer Verknüpfungen. Es wäre beispielsweise auch denkbar, Verwandschaftsverhältnisse in Form von semantischen Verknüpfungen zu strukturieren, z. B. Cousin von, Bruder/Schwester von, Großmutter von usw. Auch Mitarbeiterstrukturen lassen sich auf diese Weise hervorragend darstellen, z. B. superior, reports to, secretary usw.

 Verknüpfte Werte als Bezeichnung für Relationen verwenden

Manchmal werden die Zusammenhänge deutlicher, wenn die verknüpften Werte als Bezeichnungen für die Relationen verwendet werden. Im Beispiel der US-Präsidenten möchten Sie möglicherweise alle Vorgänger in einer Spalte anzeigen lassen und alle Nachfolger in einer anderen:

Das erreichen Sie durch folgendes Skript:

LOAD

No as DuplicateOfNo,

FirstName & ' ' & LastName as Name,

*

from presdnts.csv;

Semantic LOAD

No -1 as No,

FirstName & ' ' & LastName as Successor,

No as DuplicateOfNo,

'Dummy1'

from presdnts.csv where No > 1;

Semantic LOAD

No +1 as No,

FirstName &' ' & LastName as Predecessor,

No as DuplicateOfNo,

'Dummy2'

from presdnts.csv;

Per Mausklick auf die semantische Verknüpfung wird in dem Feld in der dritten Spalte, DuplicateOfNo, ein Wert ausgewählt, der in dieser semantischen Tabelle stets der in der Relation bezeichneten Nummer des Präsidenten entspricht.

Es mag zunächst nicht so aussehen, aber die Umkehrbezüge in obiger Konstruktion sind fast nutzlos. Sie würden den Namen eines Präsidenten liefern und beim Anklicken den Vorgänger/Nachfolger des angezeigten Präsidenten zeigen. Daher werden die Umkehrrelationen Dummy1 und Dummy2 genannt und nur die jeweils erste Relation (Spalte zwei) wird benutzt.

Da die Dummy-Relationen nicht als Listboxen angezeigt werden sollen, müssen die zweite und die vierte Spalte der semantischen Tabelle als unterschiedliche Typen von Relationen betrachtet werden. Das heißt, die erste und die dritte Spalte müssen unterschiedliche Namen tragen. Deshalb wurden die beiden Spalten, die ja beide die Nummern der Präsidenten enthalten, mit No und DuplicateOfNo bezeichnet.

Es sind zwei unterschiedliche semantic-Befehle notwendig, da für beide Relationen eigene Listboxen angezeigt werden sollen.

Dieses Beispiel hätte auch durch eine dreispaltige semantische Tabelle gelöst werden können, allerdings hätten die Listboxen für die Umkehrrelation die meisten Anwender wohl eher irritiert.