Sdílet prostřednictvím


Zpracování navigace

Navigační tabulky (nebo navigační tabulky) jsou základní součástí poskytování uživatelsky přívětivého prostředí pro váš konektor. Prostředí Power Query je zobrazí uživateli po zadání požadovaných parametrů pro funkci zdroje dat a ověření u zdroje dat.

Navigační tabulka TripPin.

Navigační tabulka je na pozadí jen běžná hodnota tabulky M s konkrétními poli metadat definovanými na svém typu. Když funkce zdroje dat vrátí tabulku s těmito definovanými poli, Power Query zobrazí dialogové okno navigátoru. Podkladová data můžete ve skutečnosti zobrazit jako hodnotu tabulky tak, že kliknete pravým tlačítkem myši na kořenový uzel a vyberete Upravit.

Table.ToNavigationTable

Pomocí funkce můžete Table.ToNavigationTable přidat metadata typu tabulky potřebná k vytvoření navigační tabulky.

Poznámka:

Aktuálně je potřeba tuto funkci zkopírovat a vložit do svého rozšíření M. V budoucnu bude pravděpodobně přesunut do standardní knihovny M.

Následující tabulka popisuje parametry této funkce:

Parametr Detaily
table Navigační tabulka.
Keycolumns Seznam názvů sloupců, které fungují jako primární klíč pro navigační tabulku
Namecolumn Název sloupce, který by měl být použit jako zobrazovaný název v navigátoru.
Datacolumn Název sloupce, který obsahuje tabulku nebo funkci, která se má zobrazit.
itemKindColumn Název sloupce, který se má použít k určení typu ikony, která se má zobrazit. Seznam platných hodnot pro sloupec najdete níže.
itemNameColumn Název sloupce, který se má použít k určení chování náhledu. Obvykle je nastavená na stejnou hodnotu jako itemKind.
isLeafColumn Název sloupce použitého k určení, jestli se jedná o uzel typu list nebo jestli je možné uzel rozšířit tak, aby obsahoval jinou navigační tabulku.

Funkce přidá do typu tabulky následující metadata:

Pole Parametr
NavigationTable.NameColumn Namecolumn
NavigationTable.DataColumn Datacolumn
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Hodnoty pro ItemKind

Každá z následujících hodnot typu položky poskytuje v navigační tabulce jinou ikonu.

  • Kanál
  • Databáze
  • Databázový server
  • Dimenze
  • Table
  • Složka
  • Function
  • Zobrazení
  • List
  • DefinedName
  • Zaznamenat

Příklady

Plochá navigační tabulka

Následující ukázka kódu zobrazí plochou navigační tabulku se třemi tabulkami a funkcí.

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"}});

Výsledkem tohoto kódu bude následující navigátor v Power BI Desktopu:

Ukázka ploché navigační tabulky

Víceúrovňová navigační tabulka

Pomocí vnořených navigačních tabulek můžete vytvořit hierarchické zobrazení datové sady. Uděláte to tak, IsLeaf že nastavíte hodnotu tohoto řádku na false (která ji označí jako uzel, který se dá rozbalit) a naformátujete Data sloupec tak, aby byl také jinou navigační tabulkou.

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;

Výsledkem tohoto kódu by bylo následující zobrazení Navigátoru v Power BI Desktopu:

Ukázka hierarchické navigační tabulky

Dynamické navigační tabulky

Složitější funkce lze z těchto základů sestavit. I když všechny výše uvedené příklady zobrazují pevně zakódované entity v navigační tabulce, je snadné zjistit, jak by se navigační tabulka mohla dynamicky generovat na základě entit, které jsou k dispozici danému uživateli. Mezi klíčové aspekty dynamických navigačních tabulek patří:

  • Zpracování chyb za účelem zajištění dobrého prostředí pro uživatele, kteří nemají přístup k určitým koncovým bodům
  • Vyhodnocení uzlu je ve výchozím nastavení opožděné; Uzly typu list se nevyhodnocují, dokud nebude rozbalený nadřazený uzel. Určité implementace víceúrovňových dynamických navigačních tabulek můžou vést k dychtivým vyhodnocení celého stromu. Nezapomeňte sledovat počet volání, která Power Query provádí, protože zpočátku vykresluje navigační tabulku. Například Table.InsertRows je "lazier" než Table.FromRecords, protože nemusí vyhodnocovat své argumenty.