TripPin 1부 - OData 서비스에 대한 데이터 커넥터

이 다중 파트 자습서에서는 파워 쿼리에 대한 새 데이터 원본 확장의 생성에 대해 설명합니다. 이 자습서는 순차적으로 수행됩니다. 각 단원은 이전 단원에서 만든 커넥터를 기반으로 하여 커넥터에 새 기능을 증분 방식으로 추가합니다.

이 단원에서는 다음을 수행합니다.

  • Visual Studio SDK를 사용하여 새 Data 커넥트or 프로젝트 만들기
  • 원본에서 데이터를 끌어오는 기본 함수 작성
  • Visual Studio에서 커넥터 테스트
  • Power BI Desktop에 커넥터 등록

기본 OData 커넥터 만들기

이 섹션에서는 새 Data 커넥트or 프로젝트를 만들고, 몇 가지 기본 정보를 제공하고, Visual Studio에서 테스트합니다.

Visual Studio를 열고 새 프로젝트를 만듭니다. 파워 쿼리 폴더 아래에서 데이터 커넥트or 프로젝트를 선택합니다. 이 샘플의 경우 프로젝트 이름을 TripPin.로 설정합니다.

VSProject.

TripPin.pq 파일을 열고 다음 커넥터 정의에 붙여넣습니다.

section TripPin;

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

TripPinImpl = (url as text) =>
    let
        source = OData.Feed(url)
    in
        source;

// Data Source Kind description
TripPin = [
    Authentication = [
        Anonymous = []
    ],
    Label = "TripPin Part 1 - OData"
];

// Data Source UI publishing description
TripPin.Publish = [
    Beta = true,
    Category = "Other",
    ButtonText = { "TripPin OData", "TripPin OData" }
];

이 커넥터 정의에는 다음이 포함됩니다.

  • TripPin 커넥터에 대한 데이터 원본 정의 레코드
  • 암시적(익명)이 이 원본에 대한 유일한 인증 유형이라는 선언
  • OData.Feed를 호출하는 구현이 있는 함수(TripPinImpl)
  • 매개 변수 형식을 로 설정하는 공유 함수(TripPin.Feed) Uri.Type
  • Power BI 데이터 가져오기 대화 상자에 커넥터를 표시할 수 있는 데이터 원본 게시 레코드

TripPin.query.pq 파일을 엽니다. 현재 내용을 내보낸 함수에 대한 호출로 바꿉니다.

TripPin.Feed("https://services.odata.org/v4/TripPinService/")

시작 단추를 선택하여 M 쿼리 유틸리티를 시작합니다.

<project.query.pq> 파일은 Power BI Desktop의 bin 폴더에 배포하지 않고도 확장을 테스트하는 데 사용됩니다. 시작 단추를 선택하거나 F5 키를 누르면 확장이 자동으로 컴파일되고 M 쿼리 유틸리티가 시작됩니다.

처음으로 쿼리를 실행하면 자격 증명 오류가 발생합니다. 파워 쿼리에서 호스팅 애플리케이션은 이 오류를 자격 증명 프롬프트로 변환합니다. Visual Studio에서 자격 증명이 누락된 데이터 원본과 해당 데이터 원본 경로를 호출하는 유사한 프롬프트가 표시됩니다. 가장 짧은 데이터 원본 경로(https://services.odata.org/)를 선택합니다. 그러면 이 경로 아래의 모든 URL에 자격 증명이 적용됩니다.

익명 자격 증명 유형을 선택한 다음 자격 증명 설정을 선택합니다.

Image of M Query Output dialog, with the Errors tab selected, and the Data Source Path filled in and the Credential Type set to Anonymous.

확인을 선택하여 대화 상자를 닫은 다음 다시 시작 단추를 선택합니다. 쿼리 실행 상태 대화 상자가 표시되고 마지막으로 쿼리에서 반환된 데이터를 보여 주는 쿼리 결과 테이블이 표시됩니다.

Query results.

테스트 파일에서 몇 가지 다른 OData URL을 사용해 보고 다른 결과가 반환되는 방식을 확인할 수 있습니다. 예시:

  • https://services.odata.org/v4/TripPinService/Me
  • https://services.odata.org/v4/TripPinService/GetPersonWithMostFriends()
  • https://services.odata.org/v4/TripPinService/People

TripPin.query.pq 파일에는 단일 문, let 문 또는 전체 섹션 문서가 포함될 수 있습니다.

let
    Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/"),
    People = Source{[Name="People"]}[Data],
    SelectColumns = Table.SelectColumns(People, {"UserName", "FirstName", "LastName"})
in
    SelectColumns

Fiddler를 열어 HTTP 트래픽을 캡처하고 쿼리를 실행합니다. 매시업 컨테이너 프로세스에서 생성된 services.odata.org 대한 몇 가지 다른 요청이 표시됩니다. 서비스의 루트 URL에 액세스하면 302 상태 더 긴 버전의 URL로 리디렉션되는 것을 볼 수 있습니다. 다음 리디렉션은 기본 라이브러리 함수에서 "무료로" 가져오는 또 다른 동작입니다.

URL을 살펴보면 문에서 발생한 쿼리 폴딩을 볼 수 있다는 점에 유의 SelectColumns 해야 합니다. https://services.odata.org/v4/TripPinService/People?$select=UserName%2CFirstName%2CLastName

쿼리에 더 많은 변환을 추가하는 경우 생성된 URL에 미치는 영향을 확인할 수 있습니다.

이 동작은 주의해야 합니다. 명시적 접기 논리를 구현하지 않았더라도 커넥터는 OData.Feed 함수에서 이러한 기능을 상속합니다. M 문은 작성할 수 있습니다. 필터 컨텍스트는 가능하면 한 함수에서 다른 함수로 흐릅니다. 커넥터 내에서 사용되는 데이터 원본 함수가 인증 컨텍스트 및 자격 증명을 상속하는 방식과 개념이 비슷합니다. 이후 단원에서는 네이티브 폴딩 기능이 있는 OData.Feed 사용을 Web.Contents바꿉니다. 동일한 수준의 기능을 얻으려면 인터페이스를 Table.View 사용하고 고유한 명시적 접기 논리를 구현해야 합니다.

Power BI Desktop에서 확장 로드

Power BI Desktop에서 확장을 사용하려면 커넥터 프로젝트의 출력 파일(TripPin.mez)을 Custom 커넥트ors 디렉터리에 복사해야 합니다.

  1. Visual Studio에서 빌드 | 선택 메뉴 모음에서 솔루션 빌드(F6) 그러면 프로젝트에 대한 .mez 파일이 생성됩니다. 기본적으로 프로젝트의 bin\Debug 폴더로 이동합니다.
  2. [My Documents]\Power BI Desktop\Custom Connectors 디렉터리를 만듭니다.
  3. 확장 파일을 이 디렉터리에 복사합니다.
  4. Power BI Desktop에서 유효성 검사 또는 경고 없이 확장이 로드되도록 허용하는 옵션(권장되지 않음)을 선택합니다(파일>옵션 및 설정>옵션>보안>데이터 확장명 아래).
  5. Power BI Desktop을 다시 시작합니다.
  6. 데이터 가져오기 대화 상자를 표시하려면 [데이터 > 가져오기]를 선택합니다.

검색 상자에 이름을 입력하여 확장을 찾을 수 있습니다.

Get Data Dialog.

함수 이름을 선택하고 커넥트 선택합니다. 타사 메시지가 나타납니다. 계속하려면 [계속]을 선택합니다. 이제 함수 호출 대화 상자가 나타납니다. 서비스의 루트 URL(https://services.odata.org/v4/TripPinService/)을 입력하고 확인을 선택합니다.

Invoke Function.

이 데이터 원본에 액세스하는 것은 이번이 처음이므로 자격 증명에 대한 프롬프트가 표시됩니다. 가장 짧은 URL이 선택되어 있는지 확인한 다음 커넥트 선택합니다.

Image of credential prompt set to Anonymous and the level setting set to the shortest URL.

간단한 데이터 테이블을 가져오는 대신 탐색기가 나타납니다. OData.Feed 함수는 파워 쿼리 환경에서 탐색 테이블로 표시하는 것으로 알고 있는 특수 메타데이터가 있는 테이블을 반환하기 때문입니다. 이 연습에서는 이후 단원에서 고유한 탐색 테이블을 만들고 사용자 지정하는 방법을 설명합니다.

Nav Table.

Me 테이블을 선택한 다음 데이터 변환을 선택합니다. 열에는 이미 할당된 형식이 있습니다(대부분). 이는 기본 OData.Feed 함수의 또 다른 기능입니다. Fiddler에서 요청을 보면 서비스의 $metadata 문서를 가져온 것을 볼 수 있습니다. 엔진의 OData 구현은 서비스의 스키마, 데이터 형식 및 관계를 결정하기 위해 이 작업을 자동으로 수행합니다.

Me Record.

결론

이 단원에서는 OData.Feed 라이브러리 함수를 기반으로 하는 간단한 커넥터를 만드는 단계를 안내했습니다. 보셨듯이 기본 함수를 통해 완벽하게 작동하는 커넥터를 사용하도록 설정하려면 논리가 OData 거의 필요하지 않습니다. ODBC와 같은 기타 확장성 사용 함수 DataSource는 비슷한 기능을 제공합니다.

다음 단원에서는 OData.Feed 사용을 덜 지원되는 함수인 Web.Contents로 바꿉니다. 각 단원에서는 사용자 지정 커넥터가 OData.Feed와 동일한 범위의 기능을 지원할 때까지 페이징, 메타데이터/스키마 검색 및 OData 쿼리 구문에 대한 쿼리 폴딩을 포함하여 더 많은 커넥터 기능을 구현합니다.

다음 단계

TripPin 2부 - REST 서비스에 대한 데이터 커넥트or