탐색 처리
탐색 테이블(또는 탐색 테이블)은 커넥터에 사용자에게 친숙한 환경을 제공하는 핵심 부분입니다. 파워 쿼리 환경은 데이터 원본 함수에 필요한 매개 변수를 입력하고 데이터 원본으로 인증한 후 사용자에게 표시합니다.
백그라운드에서 탐색 테이블은 형식에 정의된 특정 메타데이터 필드가 있는 일반 M 테이블 값일 뿐입니다. 데이터 원본 함수가 이러한 필드가 정의된 테이블을 반환하면 파워 쿼리에 탐색기 대화 상자가 표시됩니다. 루트 노드를 마우스 오른쪽 단추로 클릭하고 편집을 선택하여 실제로 기본 데이터를 테이블 값으로 볼 수 있습니다.
Table.ToNavigationTable
함수를 Table.ToNavigationTable
사용하여 탐색 테이블을 만드는 데 필요한 테이블 형식 메타데이터를 추가할 수 있습니다.
참고 항목
현재 이 함수를 복사하여 M 확장에 붙여넣어야 합니다. 나중에 M 표준 라이브러리로 이동될 가능성이 높습니다.
다음 표에서는 이 함수에 대한 매개 변수를 설명합니다.
매개 변수 | 세부 정보 |
---|---|
table | 탐색 테이블입니다. |
keyColumns | 탐색 테이블의 기본 키 역할을 하는 열 이름 목록입니다. |
Namecolumn | 탐색기에서 표시 이름으로 사용해야 하는 열의 이름입니다. |
Datacolumn | 표시할 테이블 또는 함수가 포함된 열의 이름입니다. |
itemKindColumn | 표시할 아이콘의 유형을 결정하는 데 사용할 열의 이름입니다. 열의 유효한 값 목록은 아래를 참조하세요. |
itemNameColumn | 미리 보기 동작을 결정하는 데 사용할 열의 이름입니다. 일반적으로 itemKind와 동일한 값으로 설정됩니다. |
isLeafColumn | 리프 노드인지 또는 다른 탐색 테이블을 포함하도록 노드를 확장할 수 있는지 확인하는 데 사용되는 열의 이름입니다. |
이 함수는 테이블 형식에 다음 메타데이터를 추가합니다.
필드 | 매개 변수 |
---|---|
NavigationTable.NameColumn | Namecolumn |
NavigationTable.DataColumn | Datacolumn |
NavigationTable.ItemKindColumn | itemKindColumn |
NavigationTable.IsLeafColumn | isLeafColumn |
Preview.DelayColumn | itemNameColumn |
ItemKind의 값
다음 항목 종류 값은 각각 탐색 테이블에서 다른 아이콘을 제공합니다.
- 피드
- 데이터베이스
- DatabaseServer
- 차원
- 테이블
- 폴더
- 함수
- 보기
- 시트
- DefinedName
- 녹음
예제
플랫 탐색 테이블
다음 코드 샘플에서는 세 개의 테이블과 함수가 있는 플랫 탐색 테이블을 표시합니다.
shared NavigationTable.Simple = () =>
let
objects = #table(
{"Name", "Key", "Data", "ItemKind", "ItemName", "IsLeaf"},{
{"Item1", "item1", #table({"Column1"}, {{"Item1"}}), "Table", "Table", true},
{"Item2", "item2", #table({"Column1"}, {{"Item2"}}), "Table", "Table", true},
{"Item3", "item3", FunctionCallThatReturnsATable(), "Table", "Table", true},
{"MyFunction", "myfunction", AnotherFunction.Contents, "Function", "Function", true}
}),
NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
NavTable;
shared FunctionCallThatReturnsATable = () =>
#table({"DynamicColumn"}, {{"Dynamic Value"}});
이 코드는 Power BI Desktop에 다음과 같은 탐색기를 표시합니다.
다중 수준 탐색 테이블
중첩된 탐색 테이블을 사용하여 데이터 집합에 대한 계층적 뷰를 만들 수 있습니다. 이 작업을 수행하려면 해당 행의 IsLeaf
값을 확장할 false
수 있는 노드로 표시하고 열의 서식 Data
을 다른 탐색 테이블로 지정합니다.
shared NavigationTable.Nested = () as table =>
let
objects = #table(
{"Name", "Key", "Data", "ItemKind", "ItemName", "IsLeaf"},{
{"Nested A", "n1", CreateNavTable("AAA"), "Table", "Table", false},
{"Nested B", "n2", CreateNavTable("BBB"), "Table", "Table", false},
{"Nested C", "n3", CreateNavTable("CCC"), "Table", "Table", false}
}),
NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
NavTable;
CreateNavTable = (message as text) as table =>
let
objects = #table(
{"Name", "Key", "Data", "ItemKind", "ItemName", "IsLeaf"},{
{"Item1", "item1", #table({"Column1"}, {{message}}), "Table", "Table", true},
{"Item2", "item2", #table({"Column1"}, {{message}}), "Table", "Table", true}
}),
NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
NavTable;
이 코드는 Power BI Desktop에 다음 탐색기를 표시합니다.
동적 탐색 테이블
이러한 기본 사항으로 더 복잡한 기능을 빌드할 수 있습니다. 위의 모든 예제는 탐색 테이블에 하드 코딩된 엔터티를 보여 주지만 지정된 사용자가 사용할 수 있는 엔터티를 기반으로 탐색 테이블을 동적으로 생성하는 방법을 쉽게 확인할 수 있습니다. 동적 탐색 테이블에 대한 몇 가지 주요 고려 사항은 다음과 같습니다.
- 특정 엔드포인트에 액세스할 수 없는 사용자에게 좋은 환경을 보장하기 위한 오류 처리 입니다.
- 노드 평가는 기본적으로 지연됩니다. 리프 노드는 부모 노드가 확장될 때까지 평가되지 않습니다. 다중 수준 동적 탐색 테이블의 특정 구현으로 인해 전체 트리를 즉시 평가할 수 있습니다. 파워 쿼리가 처음에 탐색 테이블을 렌더링할 때 발생하는 호출 수를 모니터링해야 합니다. 예를 들어 Table.InsertRows는 인수를 평가할 필요가 없으므로 Table.FromRecords보다 'lazier'입니다.