Cvičení – optimalizace dotazů pomocí materializační funkce

Dokončeno

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:

  1. 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ům USCustomers k proměnným a USCustomerSales.

    Spuštění dotazu

    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 .

    Screenshot of the `materialize` function, showing the first block of the query.

  2. 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 tabulky let USCustomerSales. Tím se spustí přiřazený poddotaz jenom jednou a výsledky se ukládají do mezipaměti.

    Spuštění dotazu

    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:

    Screenshot of the materialize function, showing the second block of the query.

  3. 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.

    Spuštění dotazu

    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:

    Screenshot of the materialize function, showing the entire query.