Ćwiczenie — łączenie wyników tabeli przy użyciu operatora sprzężenia

Ukończone

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.

  1. Uruchom następujące zapytanie, aby uzyskać 10 pasujących do dowolnych wierszy z tabeli Customers i tabeli SalesFact .

    Uruchamianie zapytania

    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 .

  2. Uruchom następujące zapytanie, aby podsumować połączone tabele, aby pobrać trzy kraje/regiony, które mają największą sprzedaż.

    Uruchamianie zapytania

    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:

    Zrzut ekranu przedstawiający zapytanie operatora sprzężenia z trzema najlepszymi krajami/regionami według sprzedaży.

  3. 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.

  1. Uruchom poniższe zapytanie.

    Uruchamianie zapytania

    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:

    Zrzut ekranu przedstawiający zapytanie operatora sprzężenia z krajami/regionami o najniższych przychodach.

  2. 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.

  1. Uruchom poniższe zapytanie.

    Uruchamianie zapytania

    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:

    Zrzut ekranu przedstawiający zapytanie operatora sprzężenia przedstawiające łączną sprzedaż na produkt.

  2. 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.

  1. Uruchom poniższe zapytanie.

    Uruchamianie zapytania

    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:

    Zrzut ekranu przedstawiający zapytanie operatora sprzężenia z liczbą produktów, które nie są sprzedawane w każdej kategorii produktów.

    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 przez join operatora.