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 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:
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:
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.