파워 쿼리에 대한 쿼리 계획(미리 보기)

파워 쿼리에 대한 쿼리 계획은 쿼리 평가를 더 잘 볼 수 있는 기능입니다. 특정 쿼리가 특정 단계에서 접지 않는 이유를 확인하는 데 유용합니다.

실제 예제를 통해 이 문서에서는 쿼리 계획 기능을 사용하여 쿼리 단계를 검토할 때의 기본 사용 사례 및 잠재적 이점을 보여 줍니다. 이 문서에 사용된 예제는 AdventureWorks 샘플 데이터베이스에서 다운로드할 수 있는 Azure SQL Server용 AdventureWorksLT 샘플 데이터베이스를 사용하여 만들어졌습니다.

참고 항목

파워 쿼리에 대한 쿼리 계획 기능은 파워 쿼리 온라인에서만 사용할 수 있습니다.

쿼리 접기 표시기를 검토하여 파워 쿼리에서 쿼리 계획 기능을 사용하는 제안된 프로세스, 선택한 단계에 대한 쿼리 계획을 검토하고 마지막으로 쿼리 계획 검토에서 파생된 변경 내용을 구현하는 프로세스입니다.

이 문서는 쿼리 계획을 해석하기 위해 일련의 권장 단계로 나뉘어져 있습니다. 해당 단계는 다음과 같습니다.

  1. 쿼리 접기 표시기를 검토합니다.
  2. 쿼리 단계를 선택하여 쿼리 계획을 검토합니다.
  3. 쿼리에 대한 변경 내용을 구현합니다.

다음 단계를 사용하여 사용자 고유의 파워 쿼리 온라인 환경에서 쿼리를 만듭니다.

  1. 파워 쿼리에서 - 데이터 원본을 선택하고 빈 쿼리를 선택합니다.

  2. 빈 쿼리의 스크립트를 다음 쿼리로 바꿉다.

    let
      Source = Sql.Database("servername", "database"),
      Navigation = Source{[Schema = "Sales", Item = "SalesOrderHeader"]}[Data],
      #"Removed other columns" = Table.SelectColumns(Navigation, {"SalesOrderID", "OrderDate", "SalesOrderNumber", "PurchaseOrderNumber", "AccountNumber", "CustomerID", "TotalDue"}),
      #"Filtered rows" = Table.SelectRows(#"Removed other columns", each [TotalDue] > 1000),
      #"Kept bottom rows" = Table.LastN(#"Filtered rows", 5)
    in
      #"Kept bottom rows"
    
  3. 사용자 고유의 환경에 맞는 이름을 변경 servername 합니다 database .

  4. (선택 사항) 온-프레미스 환경의 서버 및 데이터베이스에 연결하려는 경우 해당 환경에 대한 게이트웨이를 구성해야 합니다.

  5. 다음을 선택합니다.

  6. Power Query 편집기 연결 구성을 선택하고 데이터 원본에 자격 증명을 제공합니다.

참고 항목

SQL Server에 연결하는 방법에 대한 자세한 내용은 SQL Server 데이터베이스로 이동합니다.

이러한 단계를 수행한 후 쿼리는 다음 이미지의 쿼리와 같이 표시됩니다.

쿼리 접기 표시기가 활성화된 샘플 쿼리입니다.이 쿼리는 SalesOrderHeader 테이블에 연결하고 TotalDue 값이 1000을 초과하는 마지막 5개 주문에서 몇 개의 열을 선택합니다.

참고 항목

이 문서에서는 간소화된 예제를 사용하여 이 기능을 보여 주지만 이 문서에 설명된 개념은 모든 쿼리에 적용됩니다. 쿼리 계획을 읽기 전에 쿼리 접기를 잘 아는 것이 좋습니다. 쿼리 폴딩에 대해 자세히 알아보려면 쿼리 폴딩 기본 사항으로 이동합니다.

1. 쿼리 접기 표시기 검토

참고 항목

이 섹션을 읽기 전에 쿼리 접기 표시기 문서를 검토하는 것이 좋습니다.

이 프로세스의 첫 번째 단계는 쿼리를 검토하고 쿼리 접기 표시기를 주의 깊게 살펴보는 것입니다. 목표는 접지 않은 것으로 표시된 단계를 검토하는 것입니다. 그런 다음 전체 쿼리를 변경하면 이러한 변환이 완전히 접을 수 있는지 확인할 수 있습니다.

적용된 단계 창 내의 샘플 쿼리에 대한 쿼리 접기 표시기입니다.

이 예제에서는 접을 수 없는 유일한 단계는 접지 않은 단계 표시기를 통해 쉽게 식별할 수 있는 아래쪽 행 유지입니다. 이 단계는 쿼리의 마지막 단계이기도 합니다.

이제 목표는 이 단계를 검토하고 데이터 원본으로 다시 접히는 내용과 접을 수 없는 항목을 이해하는 것입니다.

2. 쿼리 단계를 선택하여 쿼리 계획을 검토합니다.

데이터 원본으로 다시 접지 않으므로 유지된 아래쪽 행 단계를 관심 있는 단계로 확인했습니다. 단계를 마우스 오른쪽 단추로 클릭하고 쿼리 계획 보기 옵션을 선택합니다. 이 작업은 선택한 단계의 쿼리 계획에 대한 다이어그램을 포함하는 새 대화 상자를 표시합니다.

노드가 줄로 연결된 쿼리 계획의 다이어그램 보기를 보여 주는 쿼리 계획 대화 상자입니다.파워 쿼리는 쿼리 접기 기본 사항에 멘션 지연 평가 및 쿼리 폴딩을 활용하여 쿼리를 최적화하려고 합니다. 이 쿼리 계획은 M 쿼리를 데이터 원본으로 전송되는 네이티브 쿼리로의 최적화된 변환을 나타냅니다. 파워 쿼리 엔진에서 수행하는 모든 변환도 포함됩니다. 노드가 표시되는 순서는 쿼리의 마지막 단계 또는 출력에서 시작하는 쿼리 순서를 따릅니다. 이 순서는 다이어그램의 맨 왼쪽에 표시되며 이 경우 유지된 아래쪽 행 단계를 나타내는 Table.LastN 노드입니다.

대화 상자 아래쪽에는 쿼리 계획 보기를 확대/축소하는 데 도움이 되는 아이콘이 있는 막대와 보기를 관리하는 데 도움이 되는 기타 단추가 있습니다. 이전 이미지의 경우 이 막대의 보기 에 맞추기 옵션을 사용하여 노드를 더 잘 이해할 수 있었습니다.

더 나은 보기를 위해 노드가 확대된 쿼리 계획 대화 상자입니다.

참고 항목

쿼리 계획은 최적화된 계획을 나타냅니다. 엔진이 쿼리를 평가할 때 모든 연산자를 데이터 원본으로 접으려고 시도합니다. 경우에 따라 폴딩을 최대화하기 위해 단계의 내부 순서를 다시 정렬할 수도 있습니다. 이 점을 염두에 두고 이 최적화된 쿼리 계획에 남아 있는 노드/연산자는 일반적으로 "접힌" 데이터 원본 쿼리와 접을 수 없고 로컬로 평가되는 모든 연산자를 포함합니다.

다른 노드에서 접힌 노드 식별

이 다이어그램의 노드를 다음 두 그룹으로 식별할 수 있습니다.

  • 접힌 노드: 이 노드는 다음과 같은 Sql.Database"데이터 원본" 노드일 Value.NativeQuery 수 있습니다. 함수 이름 아래에 있는 레이블 원격 으로 식별할 수도 있습니다.
  • 접지 않은 노드: 접을 수 없는 기타 테이블 연산자(예: Table.SelectRowsTable.SelectColumns및 기타 함수)입니다. 전체 검사스트리밍 레이블로 식별할 수도 있습니다.

다음 이미지는 빨간색 사각형 내의 접힌 노드를 보여 줍니다. 나머지 노드는 데이터 원본으로 다시 접을 수 없습니다. 목표는 해당 노드를 데이터 원본으로 다시 접도록 시도하는 것이기 때문에 나머지 노드를 검토해야 합니다.

보기에 맞추기 옵션이 선택된 대화 상자 아래쪽의 쿼리 계획 보기 컨트롤입니다.일부 노드 아래쪽에서 세부 정보 보기를 선택하여 확장 정보를 표시할 수 있습니다. 예를 들어 노드의 Value.NativeQuery 세부 정보에는 데이터 원본으로 전송될 네이티브 쿼리(SQL)가 표시됩니다.

쿼리 계획의 Value.NativeQuery 노드에 대한 세부 정보 보기입니다. 여기에 표시된 쿼리는 데이터 원본에 전송된 쿼리와 정확히 동일하지 않을 수 있지만 근사치에 적합합니다. 이 경우 SalesOrderHeader 테이블에서 쿼리할 열을 정확히 지정한 다음 TotalDue 필드를 사용하여 해당 테이블을 필터링하여 해당 필드의 값이 1000보다 큰 행만 가져오는 방법을 알려줍니다. 테이블.LastN 옆에 있는 노드는 접을 수 없으므로 파워 쿼리 엔진에 의해 로컬로 계산됩니다.

참고 항목

연산자가 쿼리 스크립트에 사용된 함수와 정확히 일치하지 않을 수 있습니다.

접지 않은 노드를 검토하고 변환을 접기 위한 작업을 고려합니다.

이제 접을 수 없는 노드를 결정했으며 로컬로 평가됩니다. 이 경우 노드만 Table.LastN 있지만 다른 시나리오에서는 더 많은 노드가 있을 수 있습니다.

단계는 접을 수 있도록 쿼리에 변경 내용을 적용하는 것이 목표입니다. 구현할 수 있는 변경 내용 중 일부는 단계를 다시 정렬하는 것부터 데이터 원본에 더 명시적인 쿼리에 대체 논리를 적용하는 것까지 다양할 수 있습니다. 그렇다고 해서 일부 변경 내용을 적용하여 모든 쿼리와 모든 작업을 접을 수 있는 것은 아닙니다. 그러나 쿼리를 다시 접을 수 있는지 시행착오를 통해 확인하는 것이 좋습니다.

데이터 원본은 SQL Server 데이터베이스이므로 테이블에서 마지막 5개 주문을 검색하는 것이 목표인 경우 SQL의 TOPORDER BY 절을 활용하는 것이 좋습니다. SQL에는 BOTTOM 절이 없으므로 PowerQuery의 Table.LastN 변환을 SQL로 변환할 수 없습니다. 단계를 제거하고 Table.LastN 다음으로 바꿀 수 있습니다.

  • 이 열은 첫 번째 순서와 마지막으로 입력된 순서를 결정하므로 테이블의 SalesOrderID 열에 의한 정렬 내림차순 단계 입니다.
  • 테이블이 정렬된 이후 상위 5개 행을 선택합니다. 이 변환은 유지된 아래쪽 행(Table.LastN)과 동일하게 수행됩니다.

이 대안은 원래 쿼리와 동일합니다. 이론적으로는 이 대안이 좋은 것처럼 보이지만, 이 대안으로 이 노드가 데이터 원본으로 완전히 다시 접히게 되는지 확인하기 위해 변경해야 합니다.

3. 쿼리 변경 내용 구현

이전 섹션에서 설명한 대안을 구현합니다.

  1. 쿼리 계획 대화 상자를 닫고 Power Query 편집기 돌아갑니다.

  2. 유지된 아래쪽 행 단계를 제거합니다 .

  3. SalesOrderID 열을 내림차순으로 정렬합니다.

    자동 필터 메뉴를 사용하여 SalesOrderID 열을 내림차순으로 정렬합니다.

  4. 데이터 미리 보기 보기의 왼쪽 위 모서리에서 테이블 아이콘을 선택하고 맨 위 행 유지를 읽는 옵션을 선택합니다. 대화 상자에서 숫자 5를 인수로 전달하고 확인을 누릅니다.

    테이블 상황에 맞는 메뉴를 사용하여 상위 5개 행만 유지하도록 상위 행 유지 변환을 선택합니다.

변경 내용을 구현한 후 쿼리 접기 표시기를 다시 검사 접힌 표시기를 제공하는지 확인합니다.

모든 쿼리 접기 표시기가 녹색이며 접을 수 있음을 보여 줍니다. 마지막 테이블은 동일한 행을 제공하지만 순서는 다릅니다. 이제 마지막 단계의 쿼리 계획을 검토할 차례입니다. 이제 상위 행을 유지합니다. 이제 접힌 노드만 있습니다. 아래에서 Value.NativeQuery 세부 정보 보기를 선택하여 데이터베이스로 전송되는 쿼리를 확인합니다.

쿼리를 변경한 후 새 쿼리 계획이며, 이제는 접힌 노드만 보여 줍니다. Value.NativeQuery는 쿼리를 평가하는 전체 SQL 문을 보여 줍니다.

이 문서에서는 적용할 대안을 제안하지만 기본 목표는 쿼리 계획을 사용하여 쿼리 폴딩을 조사하는 방법을 알아보는 것입니다. 또한 이 문서에서는 데이터 원본으로 전송되는 항목과 로컬로 수행될 변환에 대한 가시성을 제공합니다.

코드를 조정하여 쿼리에 미치는 영향을 확인할 수 있습니다. 쿼리 접기 표시기를 사용하면 쿼리가 접지 못하게 하는 단계를 더 잘 파악할 수 있습니다.