Gyakorlat – Táblaeredmények egyesítése az illesztés operátorral
Ebben a gyakorlatban megtudhatja, hogyan használhatja az operátort join
. Ne feledje, hogy az join
operátor két tábla sorait egyesíti az egyes táblák megadott oszlopainak megfelelő értékekkel.
Használjuk az operátor eredményeit az join
értékesítéssel kapcsolatos kérdések megválaszolásához.
join
Az operátor használata
Kiskereskedelmi vállalati forgatókönyvünkben a csapata arra kéri, hogy sorolja fel a három országot/régiót, amelyek a legtöbb értékesítéssel rendelkeznek.
A SalesFact tábla vizsgálatának megkezdésekor láthatja, hogy a szükséges adatok elérhetők a SalesAmount oszlopban, de a tábla nem tartalmaz ország-/régióadatokat. A többi táblát megvizsgálva láthatja, hogy az ország/régió adatai elérhetők a Vevők tábla RegionCountryName oszlopában. Azt is láthatja, hogy mindkét tábla Rendelkezik CustomerKey oszloppal.
Mivel az adatok két táblára oszlanak, az ügyféladatokra és az értékesítési adatokra is szüksége lesz egy lekérdezés írásához, amely a kért adatokat tartalmazza. A lekérdezés írásához az join
operátort és a CustomerKey oszlopot kell használnia a két tábla sorainak egyeztetéséhez.
Most már készen áll a lekérdezés megírására. Használjon belsőt join
mindkét tábla összes egyező sorának lekéréséhez. A legjobb teljesítmény érdekében használja az ügyfelek dimenziótáblát bal oldali táblaként, az értékesítési ténytáblát pedig a jobb oldali táblaként.
Az alábbi eljárás során szakaszokban hozza létre a lekérdezést, hogy jobban megértse az operátor használatának join
eredményét.
A következő lekérdezés futtatásával lekérhet 10 egyező tetszőleges sort a Vevők táblából és a SalesFact táblából.
Customers | join kind=inner SalesFact on CustomerKey | take 10
Tekintse meg az eredményként kapott listát. Figyelje meg, hogy a tábla a Vevők táblából származó oszlopokat, majd a SalesFact tábla oszlopait tartalmazza.
Futtassa az alábbi lekérdezést az összekapcsolt táblák összegzéséhez a legtöbb értékesítéssel rendelkező három ország/régió lekéréséhez.
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName | top 3 by TotalAmount
Az eredményeknek a következő képen láthatóhoz hasonlóan kell kinéznie:
Tekintse meg az eredményként kapott listát. Módosítsa a lekérdezést úgy, hogy az ezen országok/régiók megfelelő teljes költségét és nyereségét is megjelenítse.
A csapat ezután arra kéri, hogy havonta azonosítsa azokat az országokat/régiókat, amelyek a legalacsonyabb bevételt könyvelték el az elmúlt évben. Az adatok lekéréséhez hasonló lekérdezést kell használnia. Ezúttal azonban a függvény használatával megkönnyíti a startofmonth()
hónapok szerinti csoportosítást. Az aggregációs függvény használatával is arg_min()
megkeresheti azokat az országokat/régiókat, ahol a legalacsonyabb a bevétel minden hónapban.
Futtassa az alábbi lekérdezést.
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
Az eredményeknek a következő képen láthatóhoz hasonlóan kell kinéznie:
Nézze meg az egyes sorokat. Figyelje meg, hogy az első oszlop az elmúlt év hónapjait jeleníti meg csökkenő sorrendben, majd azokat az oszlopokat, amelyek az adott hónap legalacsonyabb értékesítési számával rendelkező ország/régió teljes értékesítését mutatják.
A rightouter join
típus használata
Az értékesítési csapat termékkategória szerint szeretné tudni a teljes értékesítést. Amikor elkezdi áttekinteni a rendelkezésre álló adatokat, rájön, hogy szüksége van a Termékek táblára a termékkategóriák listájának és a SalesFact táblának az értékesítési adatok lekéréséhez. Azt is észreveheti, hogy meg szeretné számolni az egyes kategóriák értékesítéseit, és listázni az összes termékkategóriát.
A kérés elemzése után úgy dönt, hogy a rightoutertjoin
használja, mivel a jobb oldali táblából származó összes értékesítési rekordot visszaadja, és a bal oldali tábla egyező adattermékkategóriájával bővül. A lekérdezést a Termékek tábla bal oldali dimenziótáblájaként, a SalesFact tények táblából származó adatokkal való egyeztetésével és az eredmény termékkategória szerinti csoportosításával írja meg.
Futtassa az alábbi lekérdezést.
Products | join kind=rightouter SalesFact on ProductKey | summarize TotalSales = count() by ProductCategoryName | order by TotalSales desc
Az eredményeknek a következő képen láthatóhoz hasonlóan kell kinéznie:
Figyelje meg, hogy a végrehajtási idő 0,834 másodperc, bár ez az idő futásonként eltérő lehet. Ez a lekérdezés az egyik módja ennek a válasznak, és jó példa egy olyan lekérdezésre, amely nincs teljesítményre optimalizálva. Később összehasonlíthatja ezt az időt egy egyenértékű lekérdezés végrehajtási idejével az
lookup
operátor használatával, amely az ilyen típusú adatokhoz van optimalizálva.
A rightanti join
típus használata
Hasonlóképpen, az értékesítési csapat tudni szeretné, hogy az egyes termékkategóriákban nem értékesített termékek száma hány. A rightantijoin
használatával lekérheti a Termékek tábla összes olyan sorát, amely nem egyezik a SalesFacts tábla egyik sorával sem, majd az eredményeket termékkategória szerint csoportosíthatja.
Futtassa az alábbi lekérdezést.
SalesFact | join kind=rightanti Products on ProductKey | summarize Count = count() by ProductCategoryName | order by Count desc
Az eredményeknek a következő képen láthatóhoz hasonlóan kell kinéznie:
Nézze meg az egyes sorokat. Az eredmények a termékkategóriánkénti eladatlan termékek számát mutatják. Figyelje meg, hogy a rightanti
join
csak azokat a termékeket választja ki, amelyek nem rendelkeznek értékesítési tényekkel, jelezve, hogy az üzemeltető általjoin
visszaadott termékek nem voltak értékesítések.