Ćwiczenie — łączenie wyników tabeli przy użyciu operatora sprzężenia
W tym ćwiczeniu dowiesz się, jak używać join
operatora . Pamiętaj, że join
operator scala wiersze dwóch tabel, pasując do wartości określonych kolumn z każdej tabeli.
Użyjmy wyników join
operatora, aby odpowiedzieć na pytania dotyczące sprzedaży.
join
Korzystanie z operatora
W naszym scenariuszu firmy zajmującej się sprzedażą detaliczną Twój zespół prosi Cię o wyświetlenie listy trzech krajów/regionów, które mają największą sprzedaż.
Po rozpoczęciu inspekcji tabeli SalesFact zauważysz, że potrzebne dane są dostępne w kolumnie SalesAmount , ale tabela nie zawiera żadnych danych kraju/regionu. Sprawdzając inne tabele, zauważysz, że dane kraju/regionu są dostępne w kolumnie RegionCountryName w tabeli Customers . Zauważysz również, że obie tabele mają kolumnę CustomerKey .
Ponieważ dane są rozłożone na dwie tabele, potrzebne są zarówno dane klienta, jak i dane sprzedaży, aby napisać zapytanie zawierające żądane informacje. Aby napisać zapytanie, użyj join
operatora i kolumny CustomerKey , aby dopasować wiersze z obu tabel.
Teraz możesz napisać zapytanie. Użyj wewnętrznegojoin
, aby pobrać wszystkie pasujące wiersze z obu tabel. Aby uzyskać najlepszą wydajność, użyj tabeli wymiarów klientów jako tabeli po lewej stronie i tabeli faktów sprzedaży jako prawej tabeli.
W poniższej procedurze utworzysz zapytanie na etapach, aby lepiej zrozumieć wynik użycia join
operatora.
Uruchom następujące zapytanie, aby uzyskać 10 pasujących do dowolnych wierszy z tabeli Customers i tabeli SalesFact .
Customers | join kind=inner SalesFact on CustomerKey | take 10
Przyjrzyj się wynikowej liście. Zwróć uwagę, że tabela zawiera kolumny z tabeli Customers , a następnie pasujące kolumny z tabeli SalesFact .
Uruchom następujące zapytanie, aby podsumować połączone tabele, aby pobrać trzy kraje/regiony, które mają największą sprzedaż.
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName | top 3 by TotalAmount
Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:
Przyjrzyj się wynikowej liście. Spróbuj zmodyfikować zapytanie, aby wyświetlić również odpowiedni całkowity koszt i zysk dla tych krajów/regionów.
Następnie twój zespół prosi Cię o zidentyfikowanie krajów/regionów o najniższych przychodach w ostatnim rekordzie roku według miesiąca. Aby uzyskać te dane, użyj podobnego zapytania. Jednak tym razem użyjesz startofmonth()
funkcji , aby ułatwić grupowanie według miesięcy. Funkcja agregacji służy arg_min()
również do znajdowania krajów/regionów z najniższymi przychodami w każdym miesiącu.
Uruchom poniższe zapytanie.
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
Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:
Przyjrzyj się każdemu wierszowi. Zwróć uwagę, że pierwsza kolumna zawiera miesiące ostatniego roku w kolejności malejącej, a następnie kolumny, które pokazują łączną sprzedaż dla kraju/regionu z najniższymi numerami sprzedaży w danym miesiącu.
Użyj typu rightouter join
Twój zespół sprzedaży chce znać łączną sprzedaż według kategorii produktów. Po rozpoczęciu przeglądania dostępnych danych zdajesz sobie sprawę, że potrzebujesz tabeli Products (Produkty ), aby uzyskać listę kategorii produktów i tabelę SalesFact w celu uzyskania danych sprzedaży. Zdajesz sobie również sprawę, że chcesz zliczyć sprzedaż dla każdej kategorii i wyświetlić listę wszystkich kategorii produktów.
Po przeanalizowaniu żądania należy użyć prawego elementu join
, ponieważ zwraca wszystkie rekordy sprzedaży z prawej tabeli wzbogacone pasującą kategorią produktu danych z lewej tabeli. Zapytanie można napisać przy użyciu tabeli Products jako tabeli wymiarów po lewej stronie, pasujących danych z tabeli faktów SalesFact i grupując wynik według kategorii produktów.
Uruchom poniższe zapytanie.
Products | join kind=rightouter SalesFact on ProductKey | summarize TotalSales = count() by ProductCategoryName | order by TotalSales desc
Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:
Zwróć uwagę, że czas wykonywania wynosi 0,834 sekundy, ale tym razem może się różnić w zależności od przebiegów. To zapytanie jest jednym ze sposobów uzyskania tej odpowiedzi i jest dobrym przykładem zapytania, które nie jest zoptymalizowane pod kątem wydajności. Później możesz porównać ten czas z czasem wykonywania równoważnego zapytania przy użyciu
lookup
operatora, który jest zoptymalizowany pod kątem tego typu danych.
Użyj odpowiedniego join
rodzaju
Podobnie zespół ds. sprzedaży chce znać liczbę produktów, które nie są sprzedawane w każdej kategorii produktów. Możesz użyć właściwości rightantijoin
, aby pobrać wszystkie wiersze z tabeli Products, które nie pasują do żadnych wierszy w tabeli SalesFacts, a następnie pogrupować wyniki według kategorii produktów.
Uruchom poniższe zapytanie.
SalesFact | join kind=rightanti Products on ProductKey | summarize Count = count() by ProductCategoryName | order by Count desc
Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:
Przyjrzyj się każdemu wierszowi. Wyniki pokazują liczbę niesprzedanych produktów na kategorię produktów. Zwróć uwagę, że rightanti
join
wybiera tylko produkty, które nie mają żadnych faktów sprzedaży, wskazując, że nie było sprzedaży produktów zwróconych przezjoin
operatora.