ナビゲーション テーブル (またはナビゲーション テーブル) は、コネクタにユーザー フレンドリなエクスペリエンスを提供するための主要な部分です。 Power Query エクスペリエンスでは、データ ソース関数に必要なパラメーターを入力し、データ ソースで認証した後、ユーザーに表示されます。
バックグラウンドでは、ナビゲーション テーブルは、特定のメタデータ フィールドが Type で定義されている通常の M テーブル値にすぎません。 データ ソース関数がこれらのフィールドを定義したテーブルを返すと、Power Query によってナビゲーター ダイアログが表示されます。 実際には、ルート ノードを右クリックして [編集] を選択すると、基になるデータがテーブル値として表示されます。
Table.ToNavigationTable
Table.ToNavigationTable関数を使用して、ナビゲーション テーブルの作成に必要なテーブルの種類のメタデータを追加できます。
注
現在、この関数をコピーして M 拡張機能に貼り付ける必要があります。 将来的には、M 標準ライブラリに移動される可能性があります。
次の表では、この関数のパラメーターについて説明します。
| パラメーター | 詳細 |
|---|---|
| テーブル | ナビゲーション テーブル。 |
| keyColumns | ナビゲーション テーブルの主キーとして機能する列名の一覧。 |
| nameColumn | ナビゲーターの表示名として使用する列の名前。 |
| dataColumn | 表示するテーブルまたは関数を含む列の名前。 |
| itemKindColumn | 表示するアイコンの種類を決定するために使用する列の名前。 列 の有効な値の一覧 については、以下を参照してください。 |
| itemNameColumn | プレビュー動作を決定するために使用する列の名前。 これは通常、itemKind と同じ値に設定されます。 |
| isLeafColumn | これがリーフ ノードかどうか、またはノードを展開して別のナビゲーション テーブルを含めることができるかどうかを判断するために使用される列の名前。 |
この関数は、次のメタデータをテーブル型に追加します。
| フィールド | パラメーター |
|---|---|
| ナビゲーションテーブル.名前列 | nameColumn |
| NavigationTable.DataColumn | dataColumn |
| ナビゲーションテーブルのアイテム種類カラム | itemKindColumn |
| NavigationTable.IsLeafColumn | isLeafColumn |
| Preview.遅延カラム | itemNameColumn |
ItemKind の値
次の項目の種類の値はそれぞれ、ナビゲーション テーブルに異なるアイコンを提供します。
- フィード
- データベース
- データベースサーバー
- ディメンション
- 表
- フォルダー
- 機能
- 表示
- Sheet
- 定義済み名前
- 記録
例示
フラット ナビゲーション テーブル
次のコード サンプルでは、3 つのテーブルと関数を含むフラット ナビゲーション テーブルを表示します。
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 に次のナビゲーターが表示されます。
動的ナビゲーション テーブル
これらの基本から、より複雑な機能を構築できます。 上記の例はすべてナビゲーション テーブルにハードコーディングされたエンティティを示していますが、特定のユーザーが使用できるエンティティに基づいてナビゲーション テーブルを動的に生成する方法を簡単に確認できます。 動的ナビゲーション テーブルには、次のような重要な考慮事項があります。
- 特定のエンドポイントにアクセスできないユーザーにとって適切なエクスペリエンスを確保するためのエラー処理。
- ノードの評価は既定では遅延です。リーフ ノードは、親ノードが展開されるまで評価されません。 複数レベルの動的ナビゲーション テーブルの特定の実装では、ツリー全体の一括評価が行われる場合があります。 Power Query が最初にナビゲーション テーブルをレンダリングする際に行っている呼び出しの数を必ず監視してください。 たとえば、引数を評価する必要がないため、 Table.InsertRows は Table.FromRecords よりも 'lazier' です。