연습 - materialize 함수를 사용하여 쿼리 최적화
이 연습에서는 함수를 materialize
사용하여 쿼리를 최적화합니다.
materialize
함수는 하위 쿼리가 실행될 때 결과를 캐시하므로 쿼리의 다른 부분에서 부분 결과를 참조할 수 있습니다.
materialize
함수 사용
소매 회사 시나리오에서 영업 팀은 상위 10개 주의 상위 고객과 수익 및 주 매출에 기여하는 금액을 백분율로 요청합니다.
이 정보를 제공하려면 다음과 같이 각 단계에서 결과를 볼 수 있도록 쿼리를 스테이지로 세분화하려고 합니다.
다음 쿼리를 실행하여 수익별로 상위 주를 가져옵니다. 문을
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
결과 목록을 살펴보세요. 테이블에는 StateProvinceName 및 USTotalStateSales에 대한 열이 포함되어 있습니다. 결과에 지역 이름을 표시하려면 Customers 테이블을 결과에 조인해야 합니다.
다음 쿼리를 실행하여 해당 주의 상위 고객에 대한 세부 정보를 결과에 추가합니다. 이전 쿼리의
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
결과는 다음 이미지와 같아야 합니다.
다음 쿼리를 실행하여 보고서의 열을 출력하고 주 매출에 대한 상위 고객의 기여도를 백분율로 계산합니다.
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)
결과는 다음 이미지와 같아야 합니다.