Esercizio - Combinare i risultati delle tabelle usando l'operatore di join
In questo esercizio viene illustrato come usare l'operatore join
. Tenere presente che l'operatore join
unisce le righe di due tabelle in base ai valori corrispondenti delle colonne specificate di ogni tabella.
Usare i risultati dell'operatore join
per rispondere a domande sulle vendite.
Usando l'operatore join
.
Nello scenario della società di vendita al dettaglio, il team chiede di elencare i tre paesi/aree geografiche dove si esegue la maggior parte delle vendite.
Quando si inizia a esaminare la tabella SalesFact, si noterà che le cifre necessarie sono disponibili nella colonna SalesAmount, ma la tabella non contiene i dati di alcun paese/area geografica. Esaminando le altre tabelle, si noterà che i dati relativi al paese/area geografica sono disponibili nella colonna RegionCountryName della tabella Customers. Si noti anche che entrambe le tabelle hanno una colonna CustomerKey.
Poiché i dati vengono distribuiti in due tabelle, sono necessari sia i dati dei clienti che i dati di vendita per scrivere una query che fornisca le informazioni richieste. Per scrivere la query, usare l'operatore join
e la colonna CustomerKey per trovare le corrispondenze con le righe di entrambe le tabelle.
Adesso è possibile scrivere la query. Usare un elemento interno join
per ottenere tutte le righe corrispondenti da entrambe le tabelle. Per ottenere prestazioni ottimali, usare la tabella delle dimensioni Customers come tabella sinistra e la tabella dei Fact di vendita come tabella destra.
Nella procedura seguente, si compila la query in più fasi per ottenere una migliore comprensione del risultato dell'uso dell'operatore join
.
Eseguire la query seguente per ottenere 10 righe arbitrarie corrispondenti dalla tabella Customers e dalla tabella SalesFact.
Customers | join kind=inner SalesFact on CustomerKey | take 10
Esaminare l'elenco risultante. Si noti che la tabella contiene colonne della tabella Customers, seguite dalle colonne corrispondenti della tabella SalesFact.
Eseguire la query seguente per riepilogare le tabelle unite in join per ottenere i tre paesi/aree geografiche dove avviene la maggior parte delle vendite.
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName | top 3 by TotalAmount
I risultati dovrebbero essere simili a quelli nell'immagine seguente:
Esaminare l'elenco risultante. Provare a modificare la query per visualizzare anche il costo totale e il profitto corrispondenti per questi paesi/aree geografiche.
Il team chiede quindi di identificare i paesi/aree geografiche con i ricavi più bassi dell'ultimo anno registrato, per mese. Per ottenere questi dati, usare una query simile. Questa volta, tuttavia, si usa la funzione startofmonth()
per facilitare il raggruppamento per mese. Si usa anche la funzione di aggregazione arg_min()
per trovare i paesi/aree geografiche con i ricavi più bassi in ogni mese.
Eseguire la query seguente.
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
I risultati dovrebbero essere simili a quelli nell'immagine seguente:
Esaminare ogni riga. Si noti che la prima colonna mostra i mesi dell'ultimo anno, in ordine decrescente, seguiti da colonne che mostrano le vendite totali per il paese/area geografica con i numeri di vendita più bassi del mese.
Usare il tipo di elemento rightouter join
Il team di vendita vuole conoscere le vendite totali per categoria di prodotti. Quando si inizia a esaminare i dati disponibili, ci si rende conto che è necessaria la tabella Products per ottenere l'elenco delle categorie di prodotti e la tabella SalesFact per ottenere i dati di vendita. Si noterà anche che si desidera contare le vendite per ogni categoria ed elencare tutte le categorie di prodotti.
Dopo aver analizzato la richiesta, si sceglie di usare il rightouter join
, perché restituisce tutti i record di vendita dalla tabella destra, arricchiti con la categoria di prodotti dati corrispondente dalla tabella sinistra. La query viene scritta usando la tabella Products come tabella delle dimensioni sinistra, i dati corrispondenti della tabella dei fatti di SalesFact e il raggruppamento del risultato in base alla categoria di prodotti.
Eseguire la query seguente.
Products | join kind=rightouter SalesFact on ProductKey | summarize TotalSales = count() by ProductCategoryName | order by TotalSales desc
I risultati dovrebbero essere simili a quelli nell'immagine seguente:
Si noti che il tempo di esecuzione è di 0,834 secondi, anche se questo tempo può variare tra le esecuzioni. Questa query è un modo per ottenere questa risposta ed è un buon esempio di query che non è ottimizzata per le prestazioni. Successivamente, è possibile confrontare questa volta con il tempo di esecuzione di una query equivalente usando l'operatore
lookup
, ottimizzato per questo tipo di dati.
Usare il tipo rightanti join
Analogamente, il team di vendita vuole conoscere il numero di prodotti che non vendono in ogni categoria di prodotti. È possibile usare rightanti join
per ottenere tutte le righe dalla tabella Products che non corrispondono ad alcuna riga nella tabella SalesFacts e quindi raggruppare i risultati in base alla categoria di prodotto.
Eseguire la query seguente.
SalesFact | join kind=rightanti Products on ProductKey | summarize Count = count() by ProductCategoryName | order by Count desc
I risultati dovrebbero essere simili a quelli nell'immagine seguente:
Esaminare ogni riga. I risultati mostrano il numero di prodotti non venduti per categoria di prodotti. Si noti che rightanti
join
seleziona solo i prodotti che non presentano dati di vendita, a indicare che non vi erano vendite per i prodotti restituiti dall'operatorejoin
.