Oefening: tabelresultaten combineren met behulp van de join-operator

Voltooid

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 binnenste join 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.

  1. Voer de volgende query uit om 10 overeenkomende willekeurige rijen op te halen uit de tabel Klanten en de tabel SalesFact .

    De query uitvoeren

    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 .

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

    De query uitvoeren

    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:

    Schermopname van de joinoperatorquery, met de drie belangrijkste landen/regio's per verkoop.

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

  1. Voer de volgende query uit.

    De query uitvoeren

    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:

    Schermopname van de join-operatorquery met de landen/regio's met de laagste omzet.

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

  1. Voer de volgende query uit.

    De query uitvoeren

    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:

    Schermopname van de join-operatorquery, met de totale verkoop per product.

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

  1. Voer de volgende query uit.

    De query uitvoeren

    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:

    Schermopname van de join-operatorquery, met het aantal producten dat niet in elke productcategorie wordt verkocht.

    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 de join exploitant zijn geretourneerd.