Übung: Kombinieren von Tabellenergebnissen mithilfe des join-Operators
In dieser Übung erfahren Sie, wie Sie den join
-Operator verwenden. Erinnern Sie sich daran, dass der join
-Operator die Zeilen zweier Tabellen mergt, indem Werte aus den angegebenen Spalten aus beiden Tabellen zugeordnet werden.
Lassen Sie uns die Ergebnisse des join
-Operators verwenden, um Fragen zum Umsatz zu beantworten.
Verwenden Sie den join
-Operator
Im diesem Einzelhandelsunternehmensszenario bittet Sie Ihr Team, die drei Länder/Regionen mit den höchsten Umsätzen aufzulisten.
Während Sie mit der Untersuchung der Tabelle SalesFact beginnen, stellen Sie fest, dass die benötigten Zahlen in der Spalte SalesAmount enthalten sind, die Tabelle jedoch keine Länder-/Regionsdaten enthält. Während Sie die anderen Tabellen untersuchen, stellen Sie fest, dass die Länder-/Regionsdaten in der Spalte RegionCountryName in der Tabelle Kunden verfügbar sind. Sie erkennen auch, dass beide Tabellen über eine CustomerKey-Spalte verfügen.
Da die Daten auf zwei Tabellen verteilt sind, benötigen Sie sowohl die Kundendaten als auch die Verkaufsdaten, um eine Abfrage zu schreiben, welche die erforderlichen Informationen bereitstellt. Zum Schreiben der Abfrage verwenden Sie den join
-Operator und die Spalte CustomerKey, um die Zeilen aus beiden Tabellen zuzuordnen.
Jetzt können Sie die Abfrage schreiben. Sie verwenden einen inneren join
, um alle übereinstimmenden Zeilen aus beiden Tabellen abzurufen. Um eine optimale Leistung zu erzielen, verwenden Sie die Dimensionstabelle „Kunden“ als linke Tabelle und die Faktentabelle „Umsatz“ als rechte Tabelle.
In der folgenden Prozedur erstellen Sie die Abfrage in Phasen, damit Sie ein besseres Verständnis für das Ergebnis der Verwendung des join
-Operators erhalten.
Führen Sie die folgende Abfrage aus, um 10 übereinstimmende beliebige Zeilen aus der Tabelle Customers und der Tabelle SalesFact abzurufen.
Customers | join kind=inner SalesFact on CustomerKey | take 10
Sehen Sie sich die resultierende Liste an. Beachten Sie, dass die Tabelle Spalten aus der Tabelle Customers enthält, gefolgt von übereinstimmenden Spalten aus der Tabelle SalesFact.
Führen Sie die folgende Abfrage aus, um die verknüpften Tabellen zusammenzufassen, um die drei Länder/Regionen mit den höchsten Umsätzen abzurufen.
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName | top 3 by TotalAmount
Die Ergebnisse sollten wie im folgenden Bild aussehen:
Sehen Sie sich die resultierende Liste an. Versuchen Sie, die Abfrage so zu ändern, dass auch die entsprechenden Gesamtkosten und der Gewinn für diese Länder/Regionen angezeigt wird.
Ihr Team bittet Sie dann, die Länder/Regionen mit den niedrigsten Einnahmen im letzten erfassten Jahr nach Monat zu identifizieren. Um diese Daten abzurufen, verwenden Sie eine ähnliche Abfrage. Dieses Mal verwenden Sie jedoch die startofmonth()
-Funktion für die Gruppierung nach Monat. Außerdem verwenden Sie die arg_min()
-Aggregationsfunktion, um die Länder/Regionen mit dem geringsten Umsatz in jedem Monat zu ermitteln.
Führen Sie die folgende Abfrage aus.
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by Month = startofmonth(DateKey), RegionCountryName | summarize arg_min(TotalAmount, RegionCountryName) by Month | top 12 by Month desc
Die Ergebnisse sollten wie im folgenden Bild aussehen:
Sehen Sie sich jede Zeile an. Beachten Sie, dass die erste Spalte die Monate des letzten Jahres in absteigender Reihenfolge anzeigt, gefolgt von Spalten, die den Gesamtumsatz für das Land/die Region mit dem niedrigsten Umsatz in diesem Monat anzeigen.
Verwenden der Rightouter-join
-Art
Ihr Vertriebsteam möchte den Gesamtumsatz pro Produktkategorie ermitteln. Wenn Sie mit der Überprüfung der verfügbaren Daten beginnen, stellen Sie fest, dass Sie die Tabelle Produkte benötigen, um die Liste der Produktkategorien abzurufen, und die Tabelle SalesFact, um die Umsatzdaten abzurufen. Außerdem möchten Sie die Umsätze für jede Kategorie feststellen und alle Produktkategorien auflisten.
Nachdem Sie die Anforderung analysiert haben, wählen Sie den rightouter join
aus, weil dieser alle Datensätze aus der rechten Tabelle zurückgibt, die mit übereinstimmenden Daten aus der linken Tabelle angereichert sind. Sie schreiben Ihre Abfrage mithilfe der Tabelle Produkte als linke Dimensionstabelle, ordnen Daten aus der Faktentabelle SalesFact zu und gruppieren das Ergebnis nach Produktkategorie.
Führen Sie die folgende Abfrage aus.
Products | join kind=rightouter SalesFact on ProductKey | summarize TotalSales = count() by ProductCategoryName | order by TotalSales desc
Die Ergebnisse sollten wie im folgenden Bild aussehen:
Beachten Sie, dass die Ausführungszeit 0,834 Sekunden beträgt. Diese Zeit kann je nach Ausführung abweichen. Diese Abfrage stellt eine Möglichkeit dar, diese Antwort zu erhalten, und ein gutes Beispiel für eine Abfrage, die nicht für Leistung optimiert ist. Später können Sie diese Zeit mit der Ausführungszeit einer äquivalenten Abfrage mit dem
lookup
-Operator vergleichen, die für diese Art von Daten optimiert ist.
Verwenden des rightanti-join
-Typs
Außerdem möchte Ihr Vertriebsteam wissen, wie viele Produkte in jeder Produktkategorie nicht verkauft werden. Sie können einen rightanti join
verwenden, um alle Zeilen aus der Tabelle Products abzurufen, die mit keiner Zeile in der Tabelle SalesFacts übereinstimmen, und dann die Ergebnisse nach Produktkategorie gruppieren.
Führen Sie die folgende Abfrage aus.
SalesFact | join kind=rightanti Products on ProductKey | summarize Count = count() by ProductCategoryName | order by Count desc
Die Ergebnisse sollten wie im folgenden Bild aussehen:
Sehen Sie sich jede Zeile an. Die Ergebnisse zeigen die Anzahl der nicht verkauften Produkte pro Produktkategorie an. Beachten Sie, dass der Rightanti
join
nur Produkte auswählt, die keine Umsatzfakten aufweisen, was darauf hinweist, dass es keine Umsätze für die vomjoin
-Operator zurückgegebenen Produkte gab.