Oefening: tabelresultaten combineren met behulp van de join-operator
In deze oefening leert u hoe u de join
operator gebruikt. Zoals u weet, worden de join
rijen van twee tabellen samengevoegd door de waarden van de opgegeven kolommen uit elke tabel te vergelijken.
Laten we de resultaten van de join
operator gebruiken om vragen over verkoop te beantwoorden.
join
De operator gebruiken
In ons retailbedrijfsscenario vraagt uw team u om de drie landen/regio's weer te geven die de meeste verkopen hebben.
Wanneer u begint met het inspecteren van de tabel SalesFact , ziet u dat de benodigde cijfers beschikbaar zijn in de kolom SalesAmount , maar de tabel bevat geen land-/regiogegevens. Als u de andere tabellen bekijkt, ziet u dat de land-/regiogegevens beschikbaar zijn in de kolom RegionCountryName in de tabel Klanten . U ziet ook dat beide tabellen een CustomerKey-kolom hebben.
Omdat de gegevens zijn verdeeld over twee tabellen, hebt u zowel de klantgegevens als de verkoopgegevens nodig om een query te schrijven die de gevraagde informatie levert. Als u de query wilt schrijven, gebruikt u de join
operator en de kolom CustomerKey om de rijen uit beide tabellen te vinden.
U bent nu klaar om de query te schrijven. Gebruik een binnenstejoin
om alle overeenkomende rijen uit beide tabellen op te halen. Voor de beste prestaties gebruikt u de dimensietabel klanten als de linkertabel en de feitentabel verkoop als de rechtertabel.
In de volgende procedure bouwt u de query in fasen om uzelf een beter inzicht te geven in het resultaat van het gebruik van de join
operator.
Voer de volgende query uit om 10 overeenkomende willekeurige rijen op te halen uit de tabel Klanten en de tabel SalesFact .
Customers | join kind=inner SalesFact on CustomerKey | take 10
Bekijk de resulterende lijst. U ziet dat de tabel kolommen uit de tabel Klanten bevat, gevolgd door overeenkomende kolommen uit de tabel SalesFact .
Voer de volgende query uit om de gekoppelde tabellen samen te vatten om de drie landen/regio's op te halen die de meeste verkopen hebben.
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName | top 3 by TotalAmount
Uw resultaten moeten eruitzien zoals in de volgende afbeelding:
Bekijk de resulterende lijst. Wijzig de query zodat ook de bijbehorende totale kosten en winst voor deze landen/regio's worden weergegeven.
Uw team vraagt u vervolgens om de landen/regio's met de laagste omzet in het afgelopen opgenomen jaar per maand te identificeren. Als u deze gegevens wilt ophalen, gebruikt u een vergelijkbare query. Maar deze keer gebruikt u de startofmonth()
functie om groepering per maand te vergemakkelijken. U gebruikt ook de arg_min()
aggregatiefunctie om de landen/regio's met de laagste inkomsten in elke maand te vinden.
Voer de volgende query uit.
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
Uw resultaten moeten eruitzien zoals in de volgende afbeelding:
Bekijk elke rij. U ziet dat in de eerste kolom de maanden van het afgelopen jaar worden weergegeven, in aflopende volgorde, gevolgd door kolommen waarin de totale verkoop voor het land/de regio met de laagste verkoopcijfers van die maand wordt weergegeven.
Het type rightouter join
gebruiken
Uw verkoopteam wil de totale verkoop per productcategorie weten. Wanneer u de beschikbare gegevens bekijkt, realiseert u zich dat u de tabel Producten nodig hebt om de lijst met productcategorieën en de tabel SalesFact op te halen om de verkoopgegevens op te halen. U realiseert zich ook dat u de verkoop voor elke categorie wilt tellen en alle productcategorieën wilt vermelden.
Nadat u de aanvraag hebt geanalyseerd, kiest u ervoor om de rechterouterjoin
te gebruiken, omdat alle verkooprecords uit de rechtertabel worden geretourneerd, verrijkt met overeenkomende gegevensproductcategorie uit de linkertabel. U schrijft uw query met behulp van de tabel Producten als de linkerdimensietabel, overeenkomende gegevens uit de tabel SalesFact-feiten en het resultaat groeperen op productcategorie.
Voer de volgende query uit.
Products | join kind=rightouter SalesFact on ProductKey | summarize TotalSales = count() by ProductCategoryName | order by TotalSales desc
Uw resultaten moeten eruitzien zoals in de volgende afbeelding:
U ziet dat de uitvoeringstijd 0,834 seconden is, maar deze tijd kan variëren tussen uitvoeringen. Deze query is een manier om dit antwoord te verkrijgen en is een goed voorbeeld van een query die niet is geoptimaliseerd voor prestaties. Later kunt u deze tijd vergelijken met de uitvoeringstijd van een equivalente query met behulp van de
lookup
operator, die is geoptimaliseerd voor dit type gegevens.
Het juiste soort gebruiken join
Op dezelfde manier wil uw verkoopteam het aantal producten weten dat niet in elke productcategorie wordt verkocht. U kunt een join
gebruiken om alle rijen op te halen uit de tabel Producten die niet overeenkomen met rijen in de tabel SalesFacts en de resultaten vervolgens te groeperen op productcategorie.
Voer de volgende query uit.
SalesFact | join kind=rightanti Products on ProductKey | summarize Count = count() by ProductCategoryName | order by Count desc
Uw resultaten moeten eruitzien zoals in de volgende afbeelding:
Bekijk elke rij. In de resultaten wordt het aantal niet-verkochte producten per productcategorie weergegeven. U ziet dat de juisteanti
join
alleen producten selecteert die geen verkoopfeiten hebben, wat aangeeft dat er geen verkoop is voor de producten die door dejoin
exploitant zijn geretourneerd.