Manipulácia s navigáciou

Navigačné tabuľky (alebo navigačné tabuľky) sú základnou súčasťou poskytovania užívateľsky prívetivého zážitku pre váš konektor. 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.

V zákulisí je nav tabuľka len bežnou hodnotou tabuľky M so špecifickými poľami metaúdajov definovanými na jej type. Keď funkcia zdroja údajov vráti tabuľku s týmito definovanými poľami, power query zobrazí dialógové okno navigátora. Základné údaje môžete skutočne zobraziť ako hodnotu tabuľky kliknutím pravým tlačidlom myši na koreňový uzol a výberom položky Upraviť.

Tabuľka.Tabuľka

Túto funkciu môžete použiť Table.ToNavigationTable na pridanie metaúdajov typu tabuľky potrebných na vytvorenie tabuľky.

Poznámka

V súčasnosti musíte túto funkciu skopírovať a prilepiť do rozšírenia M. V budúcnosti bude pravdepodobne presunutá do štandardnej knižnice M.

Nasledujúca tabuľka popisuje parametre tejto funkcie:

Parameter Podrobnosti
tabuľka Vaša navigačná tabuľka.
keyColumns Zoznam názvov stĺpcov, ktoré fungujú ako primárny kľúč pre navigačnú tabuľku.
nameColumn Názov stĺpca, ktorý by sa mal použiť ako zobrazovaný názov v navigátore.
dataColumn Názov stĺpca, ktorý obsahuje tabuľku alebo funkciu, ktorá sa má zobraziť.
itemKindColumn Názov stĺpca, ktorý sa má použiť na určenie typu ikony, ktorá sa má zobraziť. Zoznam platných hodnôt pre stĺpec nájdete nižšie.
itemNameColumn Názov stĺpca, ktorý sa má použiť na určenie správania ukážky. Toto je zvyčajne nastavené na rovnakú hodnotu ako itemKind.
isLeafColumn Názov stĺpca použitého na určenie, či ide o listový uzol, alebo či je možné uzol rozšíriť tak, aby obsahoval inú navigačnú tabuľku.

Funkcia pridáva do typu tabuľky nasledujúce metaúdaje:

Pole Parameter
NavigationTable.NameColumn nameColumn
NavigationTable.DataColumn dataColumn
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Hodnoty pre ItemKind

Každá z nasledujúcich hodnôt druhu tovaru poskytuje v navigačnej tabuľke inú ikonu.

  • Informačný kanál
  • Tretia mocnina
  • CubeDatabase
  • CubeView
  • CubeViewFolder
  • Databáza
  • DatabaseServer
  • Dimenzia
  • Tabuľka
  • Priečinok
  • Funkcia
  • Zobraziť
  • List
  • Podkupín
  • DefinedName
  • Záznam

Na obrázku nižšie sú uvedené ikony pre druhy položiek v Power BI Desktop.

Zoznam položiek navigačnej tabuľky.

Príklady

Plochá navigačná tabuľka

Nasledujúca vzorka kódu zobrazuje tabuľku plochých námorných okien 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"}});

Tento kód bude mať za následok nasledujúce zobrazenie navigátora v Power BI Desktop:

Vzorka plochého navigačného stola.

Viacúrovňová navigačná tabuľka

Na vytvorenie hierarchického zobrazenia množiny údajov je možné použiť vnorené navigačné tabuľky. Urobíte to nastavením IsLeaf hodnoty pre daný riadok na false (ktorý ho označí ako uzol, ktorý je možné rozbaliť) a Data formátovať stĺpec tak, aby bol aj inou stolovou tabuľkou.

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;

Tento kód by mal za následok nasledujúce zobrazenie navigátora v Power BI Desktop:

Ukážka hierarchickej navigačnej tabuľky.

Dynamické navigačné tabuľky

Z týchto základov je možné vybudovať komplexnejšiu funkčnosť. Zatiaľ čo všetky vyššie uvedené príklady zobrazujú ťažko kódované entity v tabuľke námorných návov, je ľahké vidieť, ako by sa mohla nav tabuľka generovať dynamicky na základe entít, ktoré sú k dispozícii danému používateľovi. Niekoľko kľúčových faktorov pre dynamické navigačné tabuľky zahŕňa:

  • Spracovanie chýb na zabezpečenie dobrého zážitku pre používateľov, ktorí nemajú prístup k určitým koncovým bodom.
  • Hodnotenie uzlov je predvolene lenivé; uzly listov sa nevyhodnocujú, kým sa nadradený uzol nerozbalí. Niektoré implementácie viacúrovňových dynamických námorných tabuliek môžu viesť k dychtivému hodnoteniu celého stromu. Nezabudnite sledovať počet hovorov, ktoré program Power Query vykonáva, pretože spočiatku vykresľuje navigačnú tabuľku. Napríklad Table.InsertRows je "lenivý" ako Table.FromRecords , pretože nemusí hodnotiť svoje argumenty.