Cvičení – optimalizace dotazů pomocí materializační funkce
V tomto cvičení použijete materialize
funkci k optimalizaci dotazů.
Vzpomeňte si, že materialize
funkce ukládá výsledky poddotazu do mezipaměti, aby ostatní části dotazu mohly odkazovat na částečný výsledek.
Použití funkce materialize
V našem scénáři maloobchodní společnosti vás prodejní tým požádá o nejlepší zákazníky v 10 nejdůležitějších státech, podle výnosů a toho, kolik přispívají v procentech k prodeji států.
Chcete-li tyto informace poskytnout, chcete rozdělit dotaz do fází, abyste mohli zobrazit výsledky v každé fázi následujícím způsobem:
Spuštěním následujícího dotazu získejte nejvyšší stavy podle výnosů.
let
Pomocí příkazu přiřaďte poddotazůmUSCustomers
k proměnným aUSCustomerSales
.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
Podívejte se na výsledný seznam. Všimněte si, že tabulka obsahuje sloupce pro StateProvinceName a USTotalStateSales. Ve výsledcích chcete zobrazit název provincie, takže se k výsledkům musíte připojit k tabulce Zákazníci .
Spuštěním následujícího dotazu přidejte provincii a podrobnosti o hlavních zákaznících ve státech do výsledků. Tato data přidáte spojením
USCustomerSales
poddotazu k výsledkům z předchozího dotazu.Teď optimalizujte dotaz pomocí
materialize
funkce v příkazu tabulkylet
USCustomerSales. Tím se spustí přiřazený poddotaz jenom jednou a výsledky se ukládají do mezipaměti.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
Výsledky by měly vypadat jako na následujícím obrázku:
Spuštěním následujícího dotazu vypíšete sloupce pro sestavu a vypočítáte příspěvky hlavních zákazníků do prodeje jejich státu v procentech.
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)
Výsledky by měly vypadat jako na následujícím obrázku: