다음을 통해 공유


쿼리 진단을 사용하여 접기 이해

쿼리 진단을 사용하는 가장 일반적인 이유 중 하나는 '폴딩'이라고도 하는 작업이 파워 쿼리에 의해 백엔드 데이터 원본에서 실행되도록 '하위 처리'된 방식을 더 잘 이해하기 위해서입니다. 접힌 항목을 보려면 백 엔드 데이터 소스로 전송되는 '가장 구체적인' 쿼리 또는 쿼리를 확인할 수 있습니다. ODATA 및 SQL에 대해 이 두 가지를 모두 살펴볼 수 있습니다.

진단 기록 문서에 설명된 작업은 기본적으로 다음 네 가지 작업을 수행합니다.

  • 데이터 원본에 연결
  • 고객 테이블 잡기
  • 고객 ID 역할을 '영업 담당자'로 필터링합니다.
  • '국가'별 그룹

ODATA 커넥터는 현재 엔드포인트에 대한 COUNT() 접기를 지원하지 않으며, 이 엔드포인트도 작업에 다소 제한되므로 최종 단계가 접을 것으로 예상하지 않습니다. 반면에 필터링은 비교적 사소합니다. 위에서 내보낸 가장 구체적인 쿼리를 보면 정확히 다음과 같습니다.

Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

ContactTitle의 테이블을 'Sales Representative'와 동일하게 필터링하고 있으며 고객 ID 및 국가라는 두 개의 열만 반환하는 것을 볼 수 있습니다. 물론 ODATA 엔드포인트에서 수행되지 않으므로 로컬로 수행해야 하는 그룹화 작업에는 국가가 필요합니다. 우리가 여기서 무엇이 접히고 무엇이 접히지 않는지를 결론 내릴 수 있습니다.

마찬가지로 SQL 진단에서 내보낸 특정 및 최종 쿼리를 살펴보면 약간 다른 내용이 표시됩니다.

    count(1) as [Count]
from 
(
    select [_].[Country]
    from [dbo].[Customers] as [_]
    where [_].[ContactTitle] = 'Sales Representative' and [_].[ContactTitle] is not null
) as [rows]
group by [Country]

여기서 파워 쿼리는 ContactTitle을 'Sales Representative'로 필터링한 다음 이 하위 선택에서 국가별로 그룹화되는 하위 선택을 만드는 것을 볼 수 있습니다. 우리의 모든 운영이 중단되었습니다.

쿼리 진단을 사용하여 수행된 접기 작업의 종류를 검사할 수 있습니다. 향후 이 기능을 더 쉽게 사용할 수 있도록 개선하길 기대합니다.