Parent-Child-Pflege mit SQL-Durchgriff 2.0

Ein neues Feature des SQL-Durchgriff 2.0 ist die Verknüpfung auf Berichte. Mit dieser Option können wir nicht nur entlang einer beliebigen Struktur navigieren, sondern diese Struktur auch pflegen. Als Beispiel wurde eine Produktstruktur ausgewählt, deren Daten in drei verschiedenen Tabellen gespeichert sind, eine davon mit einer Parent-Child-Struktur. Dieser Blog erläutert, wie die Berichte und Verknüpfungen erstellt werden, um die Navigation zu ermöglichen.

Szenario

Anhand einer Produktstruktur wird die Pflege einer Parent-Child-Struktur dargestellt. Die Produktstruktur enthält folgende Ebenen:

  • Produkthauptgruppe
    • Tabelle T_S_Produkthauptgruppe
  • Produktgruppe
    • Tabelle T_S_Produktgruppe
    • Beziehung mit Produkthauptgruppe
  • Produkt/Produktkomponente
    • Tabelle T_S_Produkt
    • Beziehung mit Produktgruppe und mit sich selbst (Parent-Child), das heißt, ein Produkt kann andere Produkte als Produktkomponente referenzieren, welche in der gleichen Tabelle gespeichert sind.

2019-10-18_crew_Produktstruktur-Tabellen
Abb. 1 Produktstruktur-Tabellen

 

Es werden zwei Varianten für das Speichern der Produktgruppe und des Produkt-Parents in der Tabelle T_S_Produkt vorgestellt. In der ersten Variante wird dafür nur eine Spalte verwendet, in der zweiten Variante zwei Spalten. Je nach Anwendungsfall kann eine der beiden Varianten ausgewählt werden.

Erste Variante

Aufbau

Nachfolgend wird die Variante „Produktgruppe und ProduktParent in einer Spalte“ erläutert. In diesem Fall, werden sowohl die Werte von Produktgruppe als auch von Produkt-Parent in der Spalte „ProduktParentID“ der Tabelle T_S_Produkt gespeichert.

2019-10-18_crew_Tabelle T_S_Produkt (erste Variante)
Abb. 2 Tabelle T_S_Produkt (erste Variante)

Beziehungen

Um für die Produkte eine Dimension erstellen zu können, müssen zwischen den drei Tabellen entsprechende Beziehungen definiert werden.

Wie in der folgenden Abbildung zu sehen, wird das Feld „ProduktParentID“ von „Produkt“ mit dem Feld „ProduktgruppeID“ von „Produktgruppe“ verlinkt, da die Spalte „ProduktParentID“ sowohl eine Produktgruppe als auch ein Produkt enthalten kann.

2019-10-18_crew_Beziehungen (erste Variante)
Abb. 3 Beziehungen (erste Variante)

Dimensionen

Die Dimension „Produkt“ wird mit drei Ebenen definiert.

2019-10-18_crew_Dimension Produkt
Abb. 4 Dimension „Produkt“

Außerdem soll eine Dimension „Produkt Parent“ aus Produkt definiert werden. Diese Dimension wird für die Verknüpfung von Produkt zu Produkt verwendet.

2019-10-18_crew_Dimension ProduktParent
Abb. 5 Dimension „ProduktParent“

Eingabe Berichte

Die SQL-Durchgriff-Berichte zur Eingabe von Produkthauptgruppe, Produktgruppe und Produkt werden wie gewohnt erstellt.

2019-10-18_crew_Berichte
Abb. 6 Berichte

Verknüpfungen

  • Bericht „Produkthauptgruppe“
    Als Verknüpfungsziel wird der Bericht „Produktgruppe“ ausgewählt. Als Filterzuweisung lassen wir DeltaMaster automatisch erkennen, welche Spalte von Produkthauptgruppe mit welcher Dimensionsebene von „Produkt“ verlinkt werden soll.

2019-10-18_crew_Verknüpfungen in Bericht Produkthauptgruppe
Abb. 7 Verknüpfungen in Bericht „Produkthauptgruppe“

  • Bericht „Produktgruppe“
    Als Verknüpfungsziel wird der Bericht „Produkt/Produktkomponente“ ausgewählt. Hier wird eine benutzerdefinierte Filterzuweisung definiert, in der die Spalte „ProduktgruppeID“ mit der Dimension „ProduktParent“ verlinkt ist.


Abb. 8 Verknüpfungen in Bericht „Produktgruppe“

  • Bericht „Produkt/Produktkomponente“
    Hier wird die Verknüpfung für die Parent-Child-Einträge definiert. Als Verknüpfungsziel wird derselbe Bericht „Produkt/Produktkomponente“ ausgewählt, sowie eine benutzerdefinierte Filterzuweisung vorgenommen, in der die Spalte „ProduktID“ mit der Dimension „ProduktParent“ verlinkt ist.

2019-10-18_crew_Verknüpfungen in Bericht Produkt_Produktkomponente
Abb. 9 Verknüpfungen in Bericht „Produkt/Produktkomponente“

Eingabe

Die Eingabe startet im Bericht „Produkthauptgruppe“, von hier aus navigieren wir entlang der Produkt-Struktur. Bei jedem Sprung werden die Daten der nächsten Ebene gefiltert angezeigt. Wie in den Abbildungen zu sehen, wird der Filter nach dem Sprung von „Produktgruppe“ zu „Produkt/Produktkomponente“ in der Dimension „Produkt Parent“ übernommen.

2019-10-18_crew_Eingabe in Produkthauptgruppe
Abb. 10 Eingabe in „Produkthauptgruppe“

 

2019-10-18_crew_Eingabe in Produktgruppe
Abb. 11 Eingabe in „Produktgruppe“

 

2019-10-18_crew_Eingabe in Produkt_Produktkomponente_1
Abb. 12 Eingabe in „Produkt/Produktkomponente“ (1)

 

2019-10-18_crew_Eingabe in Produkt_Produktkomponente_2
Abb. 13 Eingabe in „Produkt/Produktkomponente“ (2)

 

2019-10-18_crew_Eingabe in Produkt_Produktkomponente_3
Abb. 14 Eingabe in „Produkt/Produktkomponente“ (3)

Zweite Variante

Aufbau

Als zweite Variante haben wir uns vorgenommen, die Werte von Produktgruppe und ProduktParent in zwei verschiedenen Spalten zu speichern.

2019-10-18_crew_ Tabelle T_S_Produkt2 (zweite Variante)
Abb. 15 Tabelle T_S_Produkt2 (zweite Variante)

Nachfolgend werden die Unterschiede zur ersten Variante erläutert.

Beziehungen

Die Beziehung der Tabelle Produktgruppe wird mit der Spalte „ProduktgruppeID“ von Produkt festgelegt.

2019-10-18_crew_Beziehungen (zweite Variante)
Abb. 16 Beziehungen (zweite Variante)

Verknüpfungen

  • Bericht „Produktgruppe“
    Als Verknüpfungsziel wird der Bericht „Produkt/Produktkomponente“ ausgewählt. Hier wird eine benutzerdefinierte Filterzuweisung erstellt, in der die Spalte „ProduktgruppeID“ mit der Dimensionsebene „Produktgruppe“ verlinkt ist. Zudem soll eine zweite Filterzuweisung auf die Dimension „ProduktParent“ definiert werden, in diesem Fall geben wir ein fiktives Element ein, welches den Top-Knoten der Parent-Child-Dimension repräsentiert (z.B. „0“).

2019-10-18_crew_Verknüpfungen in Bericht Produktgruppe (zweite Variante)
Abb. 17 Verknüpfungen in Bericht „Produktgruppe“ (zweite Variante)

  • Bericht „Produktgruppe/Produktkomponente“
    Wie bei der ersten Variante, wird als Verknüpfungsziel derselbe Bericht „Produkt/Produktkomponente“ ausgewählt und eine benutzerdefinierte Filterzuweisung, in der die Spalte „ProduktID“ mit der Dimension „ProduktParent“ verlinkt ist, vorgenommen. Außerdem definieren wir eine zweite Filterzuweisung, in der die Spalte „ProduktgruppeID“ mit der Dimension Produkt verlinkt ist, damit wird die Filterung nach Produktgruppe ermöglicht.

2019-10-18_crew_Verknüpfungen in Bericht Produkt_Produktkomponente (zweite Variante)
Abb. 18 Verknüpfungen in Bericht „Produkt/Produktkomponente“ (zweite Variante)

Eingabe

Nach dem Sprung von „Produktgruppe“ zu „Produkt/Produktkomponente“ können wir beobachten, dass die Filterung der Produktgruppe in der Dimension „Produkt“ erhalten bleibt. Außerdem wird in der Dimension „Produkt Parent“ der Top-Knoten gefiltert.

2019-10-18_crew_Eingabe in Produkt_Produktkomponente (zweite Variante) (1)
Abb. 19 Eingabe in „Produkt/Produktkomponente“ (zweite Variante) (1)

Beim Sprung von Produkt zu Produkt bleibt die Produktgruppe ebenfalls erhalten und die Navigation verläuft nun entlang der Parent-Child-Struktur.

2019-10-18_crew_Eingabe in Produkt_Produktkomponente (zweite Variante)_2
Abb. 20 Eingabe in „Produkt/Produktkomponente“ (zweite Variante) (2)