Delen via


Navigatie afhandelen

Navigatietabellen (of navigatietabellen) vormen een belangrijk onderdeel van het bieden van een gebruiksvriendelijke ervaring voor uw connector. De Power Query-ervaring geeft deze weer aan de gebruiker nadat deze vereiste parameters voor uw gegevensbronfunctie heeft ingevoerd en die zijn geverifieerd met de gegevensbron.

De TripPin-navigatietabel.

Achter de schermen is een navigatietabel slechts een gewone M-tabelwaarde met specifieke metagegevensvelden die zijn gedefinieerd voor het type. Wanneer de gegevensbronfunctie een tabel retourneert met deze velden die zijn gedefinieerd, wordt het dialoogvenster navigator weergegeven in Power Query. U kunt de onderliggende gegevens in feite zien als een tabelwaarde door met de rechtermuisknop op het hoofdknooppunt te klikken en Bewerken te selecteren.

Table.ToNavigationTable

U kunt de Table.ToNavigationTable functie gebruiken 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 M-standaardbibliotheek.

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

Parameter DETAILS
table 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 de 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 het type pictogram te bepalen dat 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 voorbeeldgedrag 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 of het knooppunt kan worden uitgebreid met een andere navigatietabel.

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 itemtypewaarden bieden een ander pictogram in de navigatietabel.

  • Feed
  • Database
  • DatabaseServer
  • Dimensie
  • Tabel
  • Map
  • Functie
  • Weergave
  • Blad
  • DefinedName
  • Opnemen

Voorbeelden

Platte navigatietabel

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

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 navigatorweergave in Power BI Desktop:

Een voorbeeld van een platte navigatietabel.

Navigatietabel met meerdere niveaus

Het is mogelijk om geneste navigatietabellen te gebruiken om een hiërarchische weergave te maken van uw gegevensset. U doet dit door de IsLeaf waarde voor die rij in te false stellen (waarmee deze wordt gemarkeerd als een knooppunt dat kan worden uitgevouwen) en de Data kolom op te maken als ook een andere 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 zou resulteren 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 basisprincipes. Hoewel in alle bovenstaande voorbeelden vastgelegde entiteiten in de navigatietabel worden weergegeven, kunt u eenvoudig 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.
  • Knooppuntevaluatie is standaard lui; leaf-knooppunten worden pas geëvalueerd als het bovenliggende knooppunt is uitgevouwen. Bepaalde implementaties van dynamische navigatietabellen op meerdere niveaus kunnen leiden tot een gretige evaluatie van de hele structuur. Zorg ervoor dat u het aantal aanroepen controleert dat Door Power Query wordt uitgevoerd terwijl de navigatietabel in eerste instantie wordt weergegeven. Table.InsertRows is bijvoorbeeld 'lazier' dan Table.FromRecords, omdat de argumenten niet hoeven te worden geëvalueerd.