TripPin 3부 - 탐색 테이블
이 다중 파트 자습서에서는 파워 쿼리에 대한 새 데이터 원본 확장의 생성에 대해 설명합니다. 이 자습서는 순차적으로 수행됩니다. 각 단원은 이전 단원에서 만든 커넥터를 기반으로 하여 커넥터에 새 기능을 증분 방식으로 추가합니다.
이 단원에서는 다음을 수행합니다.
- 고정된 쿼리 집합에 대한 탐색 테이블 만들기
- Power BI Desktop에서 탐색 테이블 테스트
이 단원에서는 이전 단원에서 만든 TripPin 커넥터에 탐색 테이블을 추가합니다. 커넥터가 OData.Feed
함수(1부)를 사용하는 경우 OData 서비스의 $metadata 문서에서 파생된 탐색 테이블 "무료"를 받았습니다. 함수(2부)로 이동 Web.Contents
하면 기본 제공 탐색 테이블이 손실됩니다. 이 단원에서는 Power BI Desktop에서 만든 고정 쿼리 집합을 사용하고 파워 쿼리에 적절한 메타데이터를 추가하여 데이터 원본 함수에 대한 탐색기 대화 상자를 팝업합니다.
탐색 테이블 사용에 대한 자세한 내용은 탐색 테이블 설명서를 참조하세요.
커넥터에서 고정 쿼리 정의
REST API에 대한 간단한 커넥터는 각각 테이블을 반환하는 고정된 쿼리 집합으로 생각할 수 있습니다. 이러한 테이블은 커넥터의 탐색 테이블을 통해 검색할 수 있습니다. 기본적으로 탐색기의 각 항목은 특정 URL 및 변환 집합과 연결됩니다.
먼저 Power BI Desktop에서 작성한 쿼리(이전 단원)를 커넥터 파일에 복사합니다. Visual Studio Code에서 TripPin 프로젝트를 열고 Airlines 및 Airports 쿼리를 TripPin.pq 파일에 붙여넣습니다. 그런 다음, 이러한 쿼리를 단일 텍스트 매개 변수를 사용하는 함수로 전환할 수 있습니다.
GetAirlinesTable = (url as text) as table =>
let
source = TripPin.Feed(url & "Airlines"),
value = source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand;
GetAirportsTable = (url as text) as table =>
let
source = TripPin.Feed(url & "Airports"),
value = source[value],
#"Converted to Table" = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"Name", "IcaoCode", "IataCode", "Location"}, {"Name", "IcaoCode", "IataCode", "Location"}),
#"Expanded Location" = Table.ExpandRecordColumn(#"Expanded Column1", "Location", {"Address", "Loc", "City"}, {"Address", "Loc", "City"}),
#"Expanded City" = Table.ExpandRecordColumn(#"Expanded Location", "City", {"Name", "CountryRegion", "Region"}, {"Name.1", "CountryRegion", "Region"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded City",{{"Name.1", "City"}}),
#"Expanded Loc" = Table.ExpandRecordColumn(#"Renamed Columns", "Loc", {"coordinates"}, {"coordinates"}),
#"Added Custom" = Table.AddColumn(#"Expanded Loc", "Latitude", each [coordinates]{1}),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Longitude", each [coordinates]{0}),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"coordinates"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Name", type text}, {"IcaoCode", type text}, {"IataCode", type text}, {"Address", type text}, {"City", type text}, {"CountryRegion", type text}, {"Region", type text}, {"Latitude", type number}, {"Longitude", type number}})
in
#"Changed Type";
다음으로, 이러한 데이터 집합 쿼리에 대한 고정 테이블 연결을 만드는 작성한 모의 탐색 테이블 쿼리를 가져옵니다. 다음을 호출합니다.TripPinNavTable
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data"}, {
{ "Airlines", GetAirlinesTable(url) },
{ "Airports", GetAirportsTable(url) }
})
in
source;
마지막으로 기본 데이터 원본 함수TripPin.Contents
로 사용되는 새 공유 함수를 선언합니다. 또한 데이터 가져오기 대화 상자에 더 이상 표시되지 않도록 값을 TripPin.Feed
제거 Publish
합니다.
[DataSource.Kind="TripPin"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);
[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = Value.ReplaceType(TripPinNavTable, type function (url as Uri.Type) as any);
참고 항목
확장은 여러 함수를 에 연결하거나 연결하지 않고도 여러 함수로 shared
표시할 수 있습니다 DataSource.Kind
. 그러나 함수를 특정 DataSource.Kind
함수와 연결하는 경우 각 함수에는 동일한 이름과 형식의 동일한 필수 매개 변수 집합이 있어야 합니다. 이는 데이터 원본 함수 매개 변수가 결합되어 캐시된 자격 증명을 조회하는 데 사용되는 '키'를 만들기 때문입니다.
모든 변경 내용을 완료한 후 커넥터를 빌드하고 TripPin.query.pq 파일을 사용하여 함수를 테스트합니다 TripPin.Contents
. 이전에 만든 자격 증명을 계속 사용하거나 새 자격 증명을 설정한 다음 현재 파워 쿼리 파일을 평가할 수 있습니다.
TripPin.Contents("https://services.odata.org/v4/TripPinService/")
탐색 테이블 만들기
편리한 Table.ToNavigationTable 함수를 사용하여 정적 테이블의 서식을 파워 쿼리가 탐색 테이블로 인식하는 형식으로 지정합니다. 이 함수는 파워 쿼리의 표준 라이브러리에 속하지 않으므로 소스 코드를 .pq 파일에 복사해야 합니다.
이 도우미 함수를 사용하여 다음으로 함수를 업데이트하여 탐색 테이블 필드를 추가합니다 TripPinNavTable
.
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data", "ItemKind", "ItemName", "IsLeaf"}, {
{ "Airlines", GetAirlinesTable(url), "Table", "Table", true },
{ "Airports", GetAirportsTable(url), "Table", "Table", true }
}),
navTable = Table.ToNavigationTable(source, {"Name"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
navTable;
커넥터를 다시 빌드한 후 테스트 쿼리를 다시 실행하면 몇 개의 열이 더 추가된 지난 번과 비슷한 결과가 표시됩니다.
참고 항목
Visual Studio Code의 PQTest 결과 창에는 탐색기 창이 표시되지 않습니다. M 쿼리 출력 창에는 항상 기본 테이블이 표시됩니다.
확장을 Power BI Desktop 사용자 지정 커넥터에 복사하고 데이터 가져오기 대화 상자에서 새 함수를 호출하면 탐색기가 나타납니다.
탐색 트리의 루트를 마우스 오른쪽 단추로 선택하고 편집을 선택하면 Visual Studio 내에서와 동일한 테이블이 표시됩니다.
결론
이 자습서에서는 확장에 탐색 테이블을 추가했습니다. 탐색 테이블은 커넥터를 더 쉽게 사용할 수 있도록 하는 주요 기능입니다. 이 예제에서는 탐색 테이블에는 단일 수준만 있지만 파워 쿼리 UI는 여러 차원이 있는 탐색 테이블(비정형인 경우에도)을 표시할 수 있도록 지원합니다.