共用方式為


導航操作

導航表(或簡稱為 nav tables)是為連接器提供使用者友好體驗的核心部分。 Power Query 體驗會在使用者輸入任何資料來源函式所需的參數,並與資料來源認證後,向使用者顯示這些資料。

TripPin 導航表。

在幕後,導航表其實就是一個普通的 M 表值,並在其類型上定義了特定的元資料欄位。 當你的資料來源函式回傳一個定義有這些欄位的資料表時,Power Query 會顯示導航器對話框。 您可以透過右鍵點擊根節點並選擇編輯,以表格形式查看底層資料。

表格至導航表格

你可以用這個 Table.ToNavigationTable 函式加入建立導航表所需的表格類型元資料。

備註

你目前需要將這個函式複製貼上到你的 M 擴充功能中。 未來很可能會被移入 M 標準圖書館。

下表說明此函數的參數:

參數 詳細資訊
表格 你的導航桌。
keyColumns 作為導航表主鍵的欄位名稱清單。
名稱欄 導航器中應用作顯示名稱的欄位名稱。
dataColumn 包含要顯示的資料表或函式的欄位名稱。
itemKindColumn 用來決定要顯示的圖示類型所用的欄位名稱。 以下列出 該欄的有效數值 列表。
項目名稱欄 用來判斷預覽行為的欄位名稱。 這通常會設定成和 itemKind 相同的值。
isLeafColumn 用來判斷該欄位是否為葉節點,或該節點是否可展開以包含另一個導航表。

此函式會為資料表類型新增以下中繼資料:

領域 參數
導航表。名稱欄 名稱欄
NavigationTable.DataColumn dataColumn
NavigationTable.ItemKindColumn itemKindColumn
導航表。IsLeafColumn isLeafColumn
預覽 延遲欄位 項目名稱欄

ItemKind 的數值

以下每個物品類型值會在導航表中提供不同的圖示。

  • 摘要
  • 資料庫
  • 資料庫伺服器
  • 尺寸
  • Table
  • 資料夾
  • 功能
  • View
  • 工作表
  • 已定義名稱
  • 錄製

範例

平面導航表

以下程式碼範例展示了一個平面導航表,包含三個表格及一個函式。

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.InsertRowsTable.FromRecords 更「懶惰」,因為它不需要評估參數。