Ćwiczenie — optymalizowanie zapytań przy użyciu funkcji materializowania
W tym ćwiczeniu użyjesz materialize
funkcji , aby zoptymalizować zapytania.
Pamiętaj, że materialize
funkcja buforuje wyniki podzapytania podczas jego uruchamiania, aby inne części zapytania mogły odwoływać się do wyniku częściowego.
Korzystanie z funkcji materialize
W naszym scenariuszu firmy zajmującej się sprzedażą detaliczną twój zespół sprzedaży prosi cię o najlepszych klientów w 10 najlepszych stanach, według przychodów i tego, ile przyczyniają się, jako procent, do sprzedaży stanów.
Aby podać te informacje, chcesz podzielić zapytanie na etapy, aby zobaczyć wyniki na każdym etapie w następujący sposób:
Uruchom następujące zapytanie, aby uzyskać najważniejsze stany według przychodu. Użyj instrukcji ,
let
aby przypisać podzapytania do zmiennychUSCustomers
iUSCustomerSales
.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
Przyjrzyj się wynikowej liście. Zwróć uwagę, że tabela zawiera kolumny StateProvinceName i USTotalStateSales. Chcesz wyświetlić nazwę prowincji w wynikach, więc musisz dołączyć tabelę Customers do wyników.
Uruchom następujące zapytanie, aby dodać prowincję i szczegółowe informacje o najlepszych klientach w stanach do wyników. Te dane są dodawane przez dołączenie podzapytania
USCustomerSales
do wyników z poprzedniego zapytania.Teraz zoptymalizuj zapytanie przy użyciu
materialize
funkcji w instrukcji tabelilet
USCustomerSales. Spowoduje to uruchomienie przypisanej podzapytania tylko raz i buforowanie wyników.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
Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:
Uruchom następujące zapytanie, aby wyprowadzić kolumny raportu i obliczyć wkład klientów w sprzedaż swojego stanu jako wartość procentową.
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)
Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji: