Exercice : Optimiser les requêtes en utilisant la fonction materialize

Effectué

Dans cet exercice, vous utilisez la fonction materialize pour optimiser vos requêtes.

Pour rappel, la fonction materialize met en cache les résultats d’une sous-requête pendant l’exécution afin que d’autres parties de la requête puissent référencer le résultat partiel.

Utiliser la fonction materialize

Dans notre scénario d'entreprise de vente au détail, votre équipe de vente vous demande quels sont les meilleurs clients dans les 10 principaux États, en termes de chiffre d'affaires et de leur contribution, en pourcentage, aux ventes des états.

Pour fournir ces informations, vous devez décomposer la requête en plusieurs étapes afin de pouvoir consulter les résultats à chaque étape, de la manière suivante :

  1. Exécutez la requête suivante pour obtenir les états qui rapportent le meilleur chiffre d’affaires. Utilisez l’instruction let pour attribuer des sous-requêtes aux variables USCustomers et USCustomerSales.

    Exécuter la requête

    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
    

    Examinez la liste résultante. Notez que la table contient des colonnes de StateProvinceName et USTotalStateSales. Vous souhaitez afficher le nom de la province dans les résultats, vous devez donc joindre la table Clients aux résultats.

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

  2. Exécutez la requête suivante pour ajouter la province et les détails à propos des meilleurs clients dans les états aux résultats. Ajoutez ces données en joignant la sous-requête USCustomerSales aux résultats de la requête précédente.

    Optimisez maintenant la requête en utilisant la fonction materialize dans l’instruction let de table USCustomerSales. Cela permet d’exécuter la sous-requête affectée une seule fois et de mettre en cache les résultats.

    Exécuter la requête

    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
    

    Les résultats doivent ressembler à ceux de l’image suivante :

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

  3. Exécutez la requête suivante pour générer les colonnes du rapport et calculer le pourcentage que représentent les principaux clients dans les ventes à leur État.

    Exécuter la requête

    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)
    

    Les résultats doivent ressembler à ceux de l’image suivante :

    Screenshot of the materialize function, showing the entire query.