Zdieľať cez


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.

Navigačná tabuľka TripPin.

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:

Ukážka tabuľky plochej navigácie.

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:

Ukážka tabuľky hierarchickej navigácie.

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.