Wir erweitern erneut unser Datenmodell ein wenig  um diesmal das Problem Zusammengesetzte Schlüssel  ein wenig näher zu beleuchten:

Mitarbeiter:

MAID Name Vorname
1 Müller Anton
2 Schmidt Petra
..

Vorgänge:

VID MAID Status RID KID VUID
1 1 0 1 1 1
2 2 1 2 2 1
1 1 1  1 1 2

Kunden:

KID Name Vorname
1 Rabe Erhard
2 Muster Lena
..

Referenzen:

RID Referenz Status
1 EF0001 open
2 TE1203 closed
..

Untervorgänge:

VID VUID Beschreibung
1 1 Text 1
1 2 Text 2
..
 

Load Script

Mitarbeiter:
SQL Select 
  MAID
  ,Name
  ,Vorname
From Mitarbeiter;

Vorgänge:
SQL Select 
  VID
  ,MAID
  ,Status
  ,KID
  ,RID
  ,VUID
From Vorgänge;

Referenzen:
SQL Select 
  RID
  ,Referenz
  ,Status As ReferenzStatus
From Referenzen;

Kunden:
SQL Select 
  KID
  ,Name As KundenName
  ,Vorname As KundenVorname
From Mitarbeiter;

Untervorgänge:
SQL Select 
VID 
, VUID
, Beschreibung 
From Untervorgänge;

 

erneut ein Synthetischer Schlüssel

Das Problem

VID VUID Beschreibung
1 1 Text 1
1 2 Text 2
1 3 Text 3
2 1 Mustertext 1
2 2 Mustertext 2
…. ….
11    

Wie Sie hier sehen gibt es zu einem Vorgang mehrere Untervorgänge, diese werden über eine Positionsnummer VUID referenziert. Dies bedeutet das sich die Positionsnummern wiederholen und nur eine Kombination aus VID und VUID eine eindeutige Selektion innerhalb des Feldes Beschreibung erzielen. Somit können wir nicht einfach eines der beiden Felder umbenennen wie in den vorherigen Lektionen um den Synthetischen Schlüssel zu beseitigen.

Den Synthetischen Schlüssel selber bauen

An dieser Stelle müssen wir Qlik die Arbeit abnehmen und uns einfach selber einen zusammengesetzten Schlüssel bauen. Dieser muss auf beiden Seiten der beiden betroffenen Tabellen erstellt werden und muss dafür sorgen das die richtigen Werte verknüpft werden.

Wenn wir die beiden Felder VID und VUID nur mit einander verbinden kann es aber zu unerwünschten Ergebnissen kommen, da ggf. doppelte Schlüssel vorkommen. 

VID VUID Beschreibung  MeinKey
1 1 Text 1 11
1 2 Text 2 12
1 3 Text 3 13
2 1 Mustertext 1 21
2 2 Mustertext 2 22
…. …. ..
11     11

Also sollten wir ein Trennzeichen zwischen die beiden Felder stellen, welches auf keinen Fall in den Werten der beiden Seiten vorkommt. Wir nehmen für unser Beispiel die #.

VID VUID Beschreibung  MeinKey
1 1 Text 1 1#1
1 2 Text 2 1#2
1 3 Text 3 1#3
2 1 Mustertext 1 2#1
2 2 Mustertext 2 2#2
…. …. ..
11     11#

Wenn Wir nun also auf beiden Seiten MeinKey erstellen können wir auf Seiten der Unterkategorie die Felder VID und VUID entfernen und die Tabelle nur noch über MeinKey verknüpfen ohne Informationen zu verlieren.

Das Ladeskript würde dann wie folgt aussehen:

Mitarbeiter:
SQL Select 
  MAID
  ,Name
  ,Vorname
From Mitarbeiter;

Vorgänge:
SQL Select 
  VID
  ,VID + '#' + VUID As MeinKey
  ,MAID
  ,Status
  ,KID
  ,RID
  ,VUID
From Vorgänge;

Referenzen:
SQL Select 
  RID
  ,Referenz
  ,Status As ReferenzStatus
From Referenzen;

Kunden:
SQL Select 
  KID
  ,Name As KundenName
  ,Vorname As KundenVorname
From Mitarbeiter;

Untervorgänge:
SQL Select  
VID + '#' + VUID As MeinKey
, Beschreibung 
From Untervorgänge;

* Beachten Sie das Sie in SQL als Verkettungsoperator das + Zeichen und in Qlik das & Zeichen nutzen

Das Ergebnis in der Tabellenansicht:

Nun bestehen solche Nummern aber im Regelfall nicht aus so kleinen Zahlen wie in unserem Beispiel. Sie sehen ehr so aus 100020333400550#111, stellen Sie sich vor Sie laden nur 100.000 Datensätze:

100000
100020333400550#111

hier können Sie bitwertig eine Menge einsparen. Dieses erreichen Sie mit der Funktion Autonummer(), welche Sie allerdings nicht direkt im SQL Statement nutzen können. Somit müssen wir unsere Lösung in einen sogenannten vorangehend Load vor dem SQL Befehl unterbringen.

Sie sollten bei der Verwendung von Autonummer() immer darauf achten als zweiten Parameter den Namen ihres erzeugten Schlüsselfeldes als String angeben. So ist sicher gestellt das nicht über eine andere Tabelle ggf. ungewollte Paarbildungen erfolgen.

Das Ladeskript würde dann wie folgt aussehen:

Mitarbeiter:
SQL Select 
  MAID
  ,Name
  ,Vorname
From Mitarbeiter;

Vorgänge:
Load 
  VID
  ,autonumber(VID & '#' & VUID,'MeinKey') As MeinKey
  ,MAID
  ,Status
  ,RID
  ,VUID
;
SQL Select 
*
From Vorgänge;

Referenzen:
SQL Select 
  RID
  ,Referenz
  ,Status As ReferenzStatus
From Referenzen;

Kunden:
SQL Select 
  KID
  ,Name As KundenName
  ,Vorname As KundenVorname
From Mitarbeiter;

Untervorgänge:
Load 
autonumber(VID & '#' & VUID,'MeinKey') As MeinKey
, Beschreibung 
;
SQL Select *
From Untervorgänge;

* Beachten Sie das Sie in SQL als Verkettungsoperator das + Zeichen und in Qlik das & Zeichen nutzen