Esercizio - Ottimizzare le query usando la funzione materialize
In questo esercizio si usa la materialize
funzione per ottimizzare le query.
Tenere presente che la funzione materialize
memorizza nella cache i risultati di una sottoquery durante l'esecuzione, in modo che altre parti della query possano fare riferimento al risultato parziale.
Usare la funzione materialize
Nello scenario della società di vendita al dettaglio, il team di vendita chiede quali sono i principali clienti nei 10 stati migliori, in base ai ricavi e quanto contribuiscono, in percentuale, alle vendite degli stati.
Per fornire queste informazioni, è necessario suddividere la query in fasi in modo da visualizzare i risultati in ogni fase, come indicato di seguito:
Eseguire la query seguente per ottenere gli stati principali, in base ai ricavi. Usare l'istruzione
let
per assegnare sottoquery alle variabiliUSCustomers
eUSCustomerSales
.let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey; USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName
Esaminare l'elenco risultante. La tabella contiene colonne per StateProvinceName e USTotalStateSales. Si vuole visualizzare il nome della provincia nei risultati, quindi è necessario aggiungere la tabella Customers ai risultati.
Eseguire la query seguente per aggiungere la provincia e i dettagli sui principali clienti negli stati ai risultati. È possibile aggiungere questi dati unendo la
USCustomerSales
sottoquery ai risultati della query precedente.Ora, ottimizzare la query usando la
materialize
funzione nell'istruzione della tabellalet
USCustomerSales. In questo modo viene eseguita la sottoquery assegnata una sola volta e i risultati vengono memorizzati nella cache.let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = materialize( SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey); USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName | lookup ( USCustomerSales | summarize arg_max(USTotalCustomerSales, *) by StateProvinceName ) on StateProvinceName | top 10 by USTotalStateSales
I risultati dovrebbero essere simili a quelli nell'immagine seguente:
Eseguire la query seguente per restituire le colonne per il report e calcolare i contributi dei clienti principali alle vendite del relativo stato, come percentuale.
let Pcent = (portion: real, total: real) { round(100 * portion / total, 2) }; let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = materialize( SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey); USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName | lookup ( USCustomerSales | summarize arg_max(USTotalCustomerSales, *) by StateProvinceName ) on StateProvinceName | top 10 by USTotalStateSales | project StateProvinceName, StateSales = USTotalStateSales, TopCustomerFirstName = FirstName, TopCustomerLastName = LastName, TopCustomerSales = round(USTotalCustomerSales), TopCustomerPercentage = Pcent(USTotalCustomerSales, USTotalStateSales)
I risultati dovrebbero essere simili a quelli nell'immagine seguente: