Övning – Kombinera tabellresultat med hjälp av kopplingsoperatorn

Slutförd

I den här övningen får du lära dig hur du använder operatorn join . Kom ihåg att operatorn join sammanfogar raderna i två tabeller genom att matcha värdena för de angivna kolumnerna från varje tabell.

Nu ska vi använda operatörens join resultat för att besvara frågor om försäljning.

Använda operatorn join

I vårt detaljhandelsföretagsscenario ber ditt team dig att lista de tre länder/regioner som har mest försäljning.

När du börjar inspektera tabellen SalesFact ser du att de siffror du behöver är tillgängliga i kolumnen SalesAmount , men tabellen innehåller inga data om land/region. När du undersöker de andra tabellerna ser du att lands-/regiondata är tillgängliga i kolumnen RegionCountryName i tabellen Kunder . Du märker också att båda tabellerna har en CustomerKey-kolumn .

Eftersom data sprids över två tabeller behöver du både kunddata och försäljningsdata för att skriva en fråga som innehåller den begärda informationen. Om du vill skriva frågan använder du operatorn join och kolumnen CustomerKey för att matcha raderna från båda tabellerna.

Nu är du redo att skriva frågan. Använd ett inre join för att hämta alla matchande rader från båda tabellerna. För bästa prestanda använder du kunddimensionstabellen som den vänstra tabellen och tabellen sales fact som den högra tabellen.

I följande procedur skapar du frågan stegvis för att ge dig själv en bättre förståelse för resultatet av att använda operatorn join .

  1. Kör följande fråga för att hämta 10 matchande godtyckliga rader från tabellen Kunder och tabellen SalesFact .

    Kör frågan

    Customers
    | join kind=inner SalesFact on CustomerKey
    | take 10
    

    Ta en titt på den resulterande listan. Observera att tabellen innehåller kolumner från tabellen Kunder följt av matchande kolumner från tabellen SalesFact .

  2. Kör följande fråga för att sammanfatta de anslutna tabellerna för att hämta de tre länder/regioner som har mest försäljning.

    Kör frågan

    Customers
    | join kind=inner SalesFact on CustomerKey
    | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName
    | top 3 by TotalAmount
    

    Dina resultat bör se ut så här i följande bild:

    Skärmbild av frågan för kopplingsoperatorn som visar de tre främsta länderna/regionerna efter försäljning.

  3. Ta en titt på den resulterande listan. Prova att ändra frågan för att även visa motsvarande totala kostnad och vinst för dessa länder/regioner.

Teamet ber dig sedan att identifiera de länder/regioner som har de lägsta intäkterna under det senaste registrerade året, per månad. Om du vill hämta dessa data använder du en liknande fråga. Men den här gången använder startofmonth() du funktionen för att underlätta gruppering efter månad. Du använder arg_min() också aggregeringsfunktionen för att hitta de länder/regioner som har de lägsta intäkterna varje månad.

  1. Kör följande fråga.

    Kör frågan

    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
    

    Dina resultat bör se ut så här i följande bild:

    Skärmbild av frågan för kopplingsoperatorn som visar de länder/regioner som har lägst intäkter.

  2. Titta på varje rad. Observera att den första kolumnen visar månaderna för det senaste året, i fallande ordning, följt av kolumner som visar den totala försäljningen för landet/regionen med de lägsta försäljningssiffrorna den månaden.

Använd rightouter-typen join

Säljteamet vill veta den totala försäljningen per produktkategori. När du börjar granska tillgängliga data inser du att du behöver tabellen Produkter för att hämta listan över produktkategorier och tabellen SalesFact för att hämta försäljningsdata. Du inser också att du vill räkna försäljningen för varje kategori och visa en lista över alla produktkategorier.

När du har analyserat begäran väljer du att använda rightouter joineftersom den returnerar alla försäljningsposter från den högra tabellen, berikad med matchande dataproduktkategori från den vänstra tabellen. Du skriver din fråga med tabellen Produkter som den vänstra dimensionstabellen, matchar data från tabellen SalesFact-fakta och grupperar resultatet efter produktkategori.

  1. Kör följande fråga.

    Kör frågan

    Products
    | join kind=rightouter SalesFact on ProductKey
    | summarize TotalSales = count() by ProductCategoryName
    | order by TotalSales desc
    

    Dina resultat bör se ut så här i följande bild:

    Skärmbild av frågan för kopplingsoperatorn som visar den totala försäljningen per produkt.

  2. Observera att körningstiden är 0,834 sekunder, men den här tiden kan variera mellan körningar. Den här frågan är ett sätt att få det här svaret och är ett bra exempel på en fråga som inte är optimerad för prestanda. Senare kan du jämföra den här gången med körningstiden för en motsvarande fråga med hjälp av operatorn lookup , som är optimerad för den här typen av data.

Använd sorten rightanti join

På samma sätt vill säljteamet veta antalet produkter som inte säljer i varje produktkategori. Du kan använda en rightanti join för att hämta alla rader från tabellen Produkter som inte matchar några rader i tabellen SalesFacts och sedan gruppera resultatet efter produktkategori.

  1. Kör följande fråga.

    Kör frågan

    SalesFact
    | join kind=rightanti Products on ProductKey
    | summarize Count = count() by ProductCategoryName
    | order by Count desc
    

    Dina resultat bör se ut så här i följande bild:

    Skärmbild av frågan för kopplingsoperatorn som visar antalet produkter som inte säljer i varje produktkategori.

    Titta på varje rad. Resultatet visar antalet osålda produkter per produktkategori. Observera att rightanti join endast väljer produkter som inte har några försäljningsfakta, vilket indikerar att det inte fanns någon försäljning för de produkter som returnerades av operatören join .