연습 - materialize 함수를 사용하여 쿼리 최적화

완료됨

이 연습에서는 함수를 materialize 사용하여 쿼리를 최적화합니다.

materialize 함수는 하위 쿼리가 실행될 때 결과를 캐시하므로 쿼리의 다른 부분에서 부분 결과를 참조할 수 있습니다.

materialize 함수 사용

소매 회사 시나리오에서 영업 팀은 상위 10개 주의 상위 고객과 수익 및 주 매출에 기여하는 금액을 백분율로 요청합니다.

이 정보를 제공하려면 다음과 같이 각 단계에서 결과를 볼 수 있도록 쿼리를 스테이지로 세분화하려고 합니다.

  1. 다음 쿼리를 실행하여 수익별로 상위 주를 가져옵니다. 문을 let 사용하여 변수에 하위 쿼리를 할당하고 USCustomerSales.USCustomers

    쿼리 실행

    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
    

    결과 목록을 살펴보세요. 테이블에는 StateProvinceNameUSTotalStateSales에 대한 열이 포함되어 있습니다. 결과에 지역 이름을 표시하려면 Customers 테이블을 결과에 조인해야 합니다.

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

  2. 다음 쿼리를 실행하여 해당 주의 상위 고객에 대한 세부 정보를 결과에 추가합니다. 이전 쿼리의 USCustomerSales 결과에 하위 쿼리를 조인하여 이 데이터를 추가합니다.

    이제 USCustomerSales 테이블 let 문의 함수를 사용하여 materialize 쿼리를 최적화합니다. 이렇게 하면 할당된 하위 쿼리를 한 번만 실행하고 결과를 캐시합니다.

    쿼리 실행

    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
    

    결과는 다음 이미지와 같아야 합니다.

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

  3. 다음 쿼리를 실행하여 보고서의 열을 출력하고 주 매출에 대한 상위 고객의 기여도를 백분율로 계산합니다.

    쿼리 실행

    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)
    

    결과는 다음 이미지와 같아야 합니다.

    Screenshot of the materialize function, showing the entire query.