Beispiel: Erstellen eines CSV-Berichts anhand mehrerer Tabellen

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Datenquellen und -ziele > Datenbanken und MapForce > Verknüpfen von Datenbankdaten mittels Join >

Beispiel: Erstellen eines CSV-Berichts anhand mehrerer Tabellen

In diesem Beispiel wird gezeigt, wie Sie mehrere Datenbanktabellen mittels Join verknüpfen, um Daten in einen einzigen Bericht im CSV-Format zu extrahieren. Die in diesem Beispiel verwendete Datenbank heißt Nanonull.sqlite und befindet sich unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2019\MapForceExamples\. In dieser Datenbank sind Informationen über ein fiktives Unternehmen gespeichert (dazu gehören Bestellungen, Produkte, Benutzer und deren Adressen). Wie bei relationalen Datenbanken meist der Fall, sind die Informationen normalisiert und über mehrere Tabellen verteilt. So sind etwa in der Tabelle users persönliche Benutzerdaten (wie Vorname, Nachname und E-Mail-Adresse) gespeichert. Außerdem sind in der Datenbank in zwei verschiedenen Tabellen Informationen über von Benutzern bestellte Produkte gespeichert: orders (welche die eindeutige ID der Bestellung und die Uhrzeit der Bestellung enthält) und orderedproducts (welche eine Liste der bestellten Produkte und deren Anzahl enthält). Weiters sind die Namen der Produkte selbst in einer separaten Tabellen namens products gespeichert.

 

Ziel dieses Mappings ist die Erstellung eines Berichts auf Basis der aus verschiedenen Tabellen extrahierten Daten, um zu sehen, wer, wann bestimmte Produkte in welcher Menge bestellt hat. Gehen Sie dazu folgendermaßen vor:

 

1.Klicken Sie im Menü Einfügen auf Datenbank.
2.Wählen Sie als Datenbankart SQLite aus und klicken Sie auf Weiter.
3.Navigieren Sie zur oben erwähnten Datenbank Nanonull.sqlite und klicken Sie auf Verbinden.
4.Wenn Sie dazu aufgefordert werden, wählen Sie die Tabellen orderedproducts, orders, products und users aus und klicken Sie auf OK.

mf_join_multiple1

1.Fügen Sie eine Join-Komponente zum Mapping hinzu und erstellen Sie durch Klicken auf die Schaltfläche Input hinzufügen ( gui_add_function_parameter ) vier nodes/rows-Einträge.
2.Verbinden Sie die vier Tabellen aus der Datenbankkomponente mit den entsprechenden Input-Einträgen der Join-Komponente.

mf_join_multiple2

Anmerkung:In einem alternativen Szenario könnten Sie die Tabelle orderedproducts mit der Join-Komponente verbinden, anschließend die Tabelle orders (die Tabelle die darunter verschachtelt ist, nicht die Tabelle auf derselben Ebene) usw., sodass alle verknüpften Tabellen unter derselben "Root"-Tabelle verschachtelt sind, siehe auch Behandlung von Datenbankbeziehungen. Das Mapping-Ergebnis wäre dasselbe, wenn Sie die Tabellen auf diese Art miteinander verknüpfen würden. Der Unterschied ist, dass die Join-Bedingungen in diesem Beispiel manuell, wie unten gezeigt, erstellt werden müssen, während die Join-Bedingungen im alternativen Szenario von MapForce automatisch erstellt würden. Ein Beispiel für das Verknüpfen von Tabellen mittels Join, bei dem manuell keine Join-Bedingungen definiert werden müssen, finden Sie unter Beispiel: Verknüpfen von Tabellen mittels Join im SQL-Modus. Ein weiteres Mapping, in dem sich alle verknüpften Tabellen unter derselben "Root"-Tabelle befinden, finden Sie unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2019\MapForceExamples\DB_Denormalize.mfd.

 

In diesem Beispiel haben die mit der Join-Komponente verbundenen Tabellen die folgenden Reihenfolge:

 

1.orderedproducts
2.orders
3.products
4.users

 

Diese Reihenfolge wirkt sich darauf aus, wie die entsprechenden Strukturen im Dialogfeld "Join-Bedingung definieren" angezeigt werden, wenn Sie auf die Schaltfläche Join-Bedingung definieren ( mf_ic_join_key ) klicken. Die erste Tabelle (orderedproducts) wird hier standardmäßig unter Struktur 1 und die Tabelle unmittelbar danach (orders) unter Struktur 2 angezeigt.

mf_join_multiple3

Um die erste Join-Bedingung zu definieren, klicken Sie im linken Bereich auf das Datenelement order_id und im rechten Bereich auf das Datenelement id. Die Felder orderedproducts.order_id und orders.id. bilden nun ein Paar:

mf_join_multiple4

Bisher wurden erst zwei Tabellen mittels Join verknüpft. Um Join-Bedingungen zu definieren, an denen eine dritte Tabelle beteiligt ist, wählen Sie die gewünschte Tabelle aus der Dropdown-Liste oberhalb des rechten Bereichs aus. Im linken Bereich werden in diesem Fall alle Tabellen, die davor vorkommen, angezeigt. Wenn Sie products auf der rechten Seite auswählen, werden auf der linken Seite orderedproducts und orders angezeigt (da diese Tabellen in der Join-Komponente vor products vorkommen). Sie können nun Paare aus den Feldern der Tabelle products und den Feldern der davor vorkommenden Tabellen (in diesem Fall orderedproducts.product_id und products.id) bilden.

mf_join_multiple5

Um eine vierte Tabelle (users) mittels Join zu verknüpfen, wählen Sie die Tabelle users aus der Dropdown-Liste aus. Sie können nun Paare aus den Feldern orders.user_id und users.id bilden.

mf_join_multiple6

Jetzt, da alle erforderlichen Join-Bedingungen definiert wurden, können Datenelemente der Join-Komponente weiter auf eine Zielkomponente gemappt werden. Fügen Sie nun zum Abschluss des Mappings eine CSV-Komponente hinzu (siehe CSV- und Textdateien) und verbinden Sie Datenelemente aus der Join-Komponente mit der CSV-Zielkomponente, wie unten gezeigt.

mf_join_multiple7

Mit dem oben gezeigten Mapping wird ein Bericht (im CSV-Format) erstellt, der folgendermaßen aus allen vier am Join beteiligten Tabellen kompiliert wird:

 

ID der Bestellung (aus der Tabelle orderedproducts)
Anzahl der bestellten Produkte (aus der Tabelle orderedproducts)
Uhrzeit der Bestellung (aus der Tabelle orders)
Name des bestellten Produkts (aus der Tabelle products)
Vor- und Nachname des Benutzers, der das Produkt bestellt hat (aus der Tabelle users).

© 2019 Altova GmbH