Spracovanie navigácie
Navigačné tabuľky (alebo navigačné tabuľky) sú základnou súčasťou poskytovania používateľsky príjemného prostredia pre váš konektor. Prostredie Power Query ich zobrazí používateľovi po zadaní požadovaných parametrov pre funkciu zdroja údajov a po overení pomocou zdroja údajov.
Na pozadí je navigačná tabuľka len bežnou hodnotou tabuľky jazyka M s konkrétnymi poľami metaúdajov definovanými v jej type. Keď funkcia zdroja údajov vráti tabuľku s definovanými poľami, Power Query zobrazí dialógové okno navigátora. Základné údaje môžete zobraziť ako hodnotu tabuľky kliknutím pravým tlačidlom myši na koreňový uzol a výberom položky Upraviť.
Table.ToNavigationTable
Pomocou funkcie môžete Table.ToNavigationTable
pridať metaúdaje typu tabuľky, ktoré sú potrebné na vytvorenie navigačnej tabuľky.
Poznámka
Aktuálne je potrebné skopírovať a prilepiť túto funkciu do rozšírenia jazyka M. V budúcnosti sa pravdepodobne premiestni do štandardnej knižnice M.
Nasledujúca tabuľka popisuje parametre pre túto funkciu:
Parameter | Podrobnosti |
---|---|
table | Vaša navigačná tabuľka. |
keyColumns | Zoznam názvov stĺpcov, ktoré slúžia ako primárny kľúč tabuľky navigácie. |
nameColumn | Názov stĺpca, ktorý sa má použiť ako zobrazovaný názov v navigátore. |
dataColumn (stĺpec údajov) | Názov stĺpca, ktorý obsahuje funkciu Table alebo Function, ktorá sa má zobraziť. |
itemKindColumn | Názov stĺpca, ktorý sa má použiť na určenie typu ikony, ktorá sa má zobraziť. Nižšie nájdete zoznam platných hodnôt pre stĺpec. |
itemNameColumn | Názov stĺpca, ktorý sa má použiť na určenie správania pri ukážke. Zvyčajne je nastavená na rovnakú hodnotu ako itemKind. |
isLeafColumn | Názov stĺpca, ktorý sa používa na určenie, či ide o listový uzol, alebo či uzol možno rozbaliť tak, aby obsahoval inú navigačnú tabuľku. |
Funkcia pridá do typu tabuľky nasledujúce metaúdaje:
Pole | Parameter |
---|---|
NavigationTable.NameColumn | nameColumn |
NavigationTable.DataColumn | dataColumn (stĺpec údajov) |
NavigationTable.ItemKindColumn | itemKindColumn |
NavigationTable.IsLeafColumn | isLeafColumn |
Preview.DelayColumn | itemNameColumn |
Hodnoty pre ItemKind
Každá z nasledujúcich hodnôt druhov položiek poskytuje v navigačnej tabuľke inú ikonu.
- Informačný kanál
- Databáza
- DatabaseServer
- Rozmer
- Tabuľka
- Priečinok
- Function
- Zobraziť
- List
- DefinedName (NázovDefinované
- Record
Príklady
Tabuľka s plochou navigáciou
Nasledujúca ukážka kódu zobrazuje plochú navigačnú tabuľku s tromi tabuľkami a funkciou.
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ýsledkom tohto kódu bude nasledujúce zobrazenie Navigátora v aplikácii Power BI Desktop:
Tabuľka s viacúrovňovou navigáciou
Vnorené navigačné tabuľky je možné použiť na vytvorenie hierarchického zobrazenia množiny údajov. Vykonáte to nastavením IsLeaf
hodnoty pre tento riadok ( false
ktorý ju označí ako uzol, ktorý je možné rozbaliť) a naformátujte Data
stĺpec ako ďalšiu navigačnú tabuľku.
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ýsledkom tohto kódu by bolo zobrazenie Navigátora v aplikácii Power BI Desktop:
Dynamické navigačné tabuľky
Zložitejšie funkcie možno vytvoriť z týchto základných funkcií. Zatiaľ čo všetky vyššie uvedené príklady zobrazujú pevne zakódované entity v navigačnej tabuľke, je jednoduché vidieť, ako by sa navigačná tabuľka dala dynamicky vygenerovať na základe entít, ktoré sú k dispozícii pre daného používateľa. Medzi kľúčové dôležité informácie týkajúce sa dynamických navigačných tabuliek patrí:
- Spracovanie chýb na zabezpečenie dobrého prostredia pre používateľov, ktorí nemajú prístup k určitým koncovým bodom.
- Hodnotenie uzla je predvolene lenivé, listové uzly sa nevyhodnocujú, kým sa nerozbalí nadradený uzol. Niektoré implementácie multiúrovňovo dynamických navigačných tabuliek môžu spôsobiť nedočkavé vyhodnotenie celého stromu. Nezabudnite sledovať počet volaní, ktoré vykonáva doplnok Power Query, pretože na začiatku vykreslí navigačnú tabuľku. Napríklad Table.InsertRows je "lazier" ako Table.FromRecords, pretože nemusí hodnotiť svoje argumenty.