Övning – Kombinera tabellresultat med hjälp av kopplingsoperatorn
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
.
Kör följande fråga för att hämta 10 matchande godtyckliga rader från tabellen Kunder och tabellen SalesFact .
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 .
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.
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:
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.
Kör följande fråga.
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:
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 join
eftersom 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.
Kör följande fråga.
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:
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.
Kör följande fråga.
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:
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örenjoin
.