Navigatie verwerken

Navigatietabellen (of navigatietabellen) zijn een belangrijk onderdeel van het bieden van een gebruiksvriendelijke ervaring voor uw connector. De Power Query worden weergegeven aan de gebruiker nadat ze de vereiste parameters voor uw gegevensbronfunctie hebben ingevoerd en zijn geverifieerd met de gegevensbron.

De TripPin-navigatietabel.

Achter de schermen is een navigatietabel slechts een normale M-tabelwaarde met specifieke metagegevensvelden die zijn gedefinieerd op het type. Wanneer uw gegevensbronfunctie een tabel retourneert waarin deze velden zijn gedefinieerd, Power Query het dialoogvenster navigator weergegeven. U kunt de onderliggende gegevens daadwerkelijk zien als een tabelwaarde door met de rechtermuisknop op het hoofd knooppunt te klikken en Bewerken te selecteren.

Table.ToNavigationTable

U kunt de functie gebruiken Table.ToNavigationTable om de metagegevens van het tabeltype toe te voegen die nodig zijn om een navigatietabel te maken.

Notitie

U moet deze functie momenteel kopiëren en plakken in uw M-extensie. In de toekomst wordt deze waarschijnlijk verplaatst naar de standaardbibliotheek van M.

In de volgende tabel worden de parameters voor deze functie beschreven:

Parameter Details
tabel Uw navigatietabel.
keyColumns Lijst met kolomnamen die fungeren als de primaire sleutel voor uw navigatietabel.
nameColumn De naam van de kolom die moet worden gebruikt als weergavenaam in de navigator.
Datacolumn De naam van de kolom die de tabel of functie bevat die moet worden weergegeven.
itemKindColumn De naam van de kolom die moet worden gebruikt om te bepalen welk type pictogram moet worden weergegeven. Zie hieronder voor de lijst met geldige waarden voor de kolom.
itemNameColumn De naam van de kolom die moet worden gebruikt om het gedrag van de preview te bepalen. Dit is doorgaans ingesteld op dezelfde waarde als itemKind.
isLeafColumn De naam van de kolom die wordt gebruikt om te bepalen of dit een leaf-knooppunt is of dat het knooppunt kan worden uitgebreid om een andere navigatietabel te bevatten.

De functie voegt de volgende metagegevens toe aan het tabeltype:

Veld Parameter
NavigationTable.NameColumn nameColumn
NavigationTable.DataColumn Datacolumn
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Waarden voor ItemKind

Elk van de volgende soort itemwaarden biedt een ander pictogram in de navigatietabel.

  • Feed
  • Kubus
  • CubeDatabase
  • Cubeview
  • CubeViewFolder
  • Database
  • DatabaseServer
  • Dimensie
  • Tabel
  • Map
  • Functie
  • Weergave
  • Blad
  • Subcube
  • DefinedName
  • Record

In de onderstaande afbeelding ziet u de pictogrammen voor itemsoorten in Power BI Desktop.

Lijst met Item in navigatietabelKinds.

Voorbeelden

Platte navigatietabel

In het volgende codevoorbeeld wordt een platte navigatietabel met drie tabellen en een functie weergegeven.

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

Deze code resulteert in de volgende Navigator-weergave in Power BI Desktop:

Een voorbeeld van een platte navigatietabel.

Navigatietabel op meerdere niveau

Het is mogelijk geneste navigatietabellen te gebruiken om een hiërarchische weergave van uw gegevensset te maken. U doet dit door de waarde voor die rij in te stellen op (dit markeert deze als een knooppunt dat kan worden uitgebreid) en de kolom op te maken als ook een IsLeaf false andere Data navigatietabel.

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;

Deze code resulteert in de volgende Navigator-weergave in Power BI Desktop:

Een voorbeeld van een hiërarchische navigatietabel.

Dynamische navigatietabellen

Complexere functionaliteit kan worden gebouwd op basis van deze basisbeginselen. Hoewel in alle bovenstaande voorbeelden in code gecodeerde entiteiten in de navigatietabel worden vermeld, is het eenvoudig om te zien hoe een navigatietabel dynamisch kan worden gegenereerd op basis van entiteiten die beschikbaar zijn voor een bepaalde gebruiker. Enkele belangrijke overwegingen voor dynamische navigatietabellen zijn:

  • Foutafhandeling om een goede ervaring te garanderen voor gebruikers die geen toegang hebben tot bepaalde eindpunten.
  • De evaluatie van knooppunt is standaard lui; leaf-knooppunten worden pas geëvalueerd als het bovenliggende knooppunt is uitvoed. Bepaalde implementaties van dynamische navigatietabellen op meerdere niveau kunnen resulteren in een gretige evaluatie van de hele structuur. Zorg ervoor dat u het aantal aanroepen bewaakt dat Power Query maakt, omdat de navigatietabel in eerste instantie wordt weergegeven. Is bijvoorbeeld Table.InsertRows 'lazier' dan , omdat het de argumenten Table.FromRecords niet hoeft te evalueren.