Del via


Håndtering af navigation

Navigationstabeller (eller navigationstabeller) er en central del af at give en brugervenlig oplevelse for din connector. Power-forespørgselsoplevelsen viser dem til brugeren, når de har angivet de påkrævede parametre for din datakildefunktion og er godkendt med datakilden.

Navigationstabellen TripPin.

I baggrunden er en navigationstabel blot en almindelig M-tabelværdi med specifikke metadatafelter, der er defineret i dens type. Når din datakildefunktion returnerer en tabel med disse felter defineret, viser Power Query dialogboksen navigator. Du kan faktisk se de underliggende data som en tabelværdi ved at højreklikke på rodnoden og vælge Rediger.

Table.ToNavigationTable

Du kan bruge funktionen Table.ToNavigationTable til at tilføje de metadata af tabeltypen, der skal bruges til at oprette en navigationstabel.

Bemærk

Du skal i øjeblikket kopiere og indsætte denne funktion i din M-udvidelse. I fremtiden vil den sandsynligvis blive flyttet til M-standardbiblioteket.

I følgende tabel beskrives parametrene for denne funktion:

Parameter Oplysninger
table Navigationstabellen.
keyColumns Liste over kolonnenavne, der fungerer som den primære nøgle for navigationstabellen.
nameColumn Navnet på den kolonne, der skal bruges som vist navn i navigatoren.
dataKolonne Navnet på den kolonne, der indeholder den tabel eller funktion, der skal vises.
itemKindColumn Navnet på den kolonne, der skal bruges til at bestemme, hvilken type ikon der skal vises. Nedenfor kan du se en liste over gyldige værdier for kolonnen.
itemNameColumn Navnet på den kolonne, der skal bruges til at bestemme funktionsmåden for eksempelvisningen. Dette er typisk angivet til den samme værdi som itemKind.
isLeafColumn Navnet på den kolonne, der bruges til at bestemme, om dette er en bladnode, eller om noden kan udvides til at indeholde en anden navigationstabel.

Funktionen føjer følgende metadata til tabeltypen:

Felt Parameter
NavigationTable.NameColumn nameColumn
NavigationTable.DataColumn dataKolonne
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Værdier for ItemKind

Hver af følgende element kind værdier giver et andet ikon i navigationstabellen.

  • Feed
  • Database
  • Databaseserver
  • Dimension
  • Table
  • Mappe
  • Funktion
  • Vis
  • Ark
  • DefinedName
  • Post

Eksempler

Flad navigationstabel

I følgende kodeeksempel vises en flad navigationstabel med tre tabeller og en funktion.

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

Denne kode resulterer i følgende Navigator-visning i Power BI Desktop:

Et eksempel på en flad navigationstabel.

Navigationstabel med flere niveauer

Det er muligt at bruge indlejrede navigationstabeller til at oprette en hierarkisk visning over dit datasæt. Det gør du ved at angive værdien for den IsLeaf pågældende række til false (som markerer den som en node, der kan udvides) og formatere kolonnen Data til også at være en anden navigationstabel.

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;

Denne kode ville resultere i følgende Navigator-visning i Power BI Desktop:

Et eksempel på en hierarkisk navigationstabel.

Dynamiske navigationstabeller

Du kan bygge mere komplekse funktioner ud fra disse grundlæggende funktioner. Selvom alle ovenstående eksempler viser hard-coded-enheder i navigationstabellen, er det nemt at se, hvordan en navigationstabel kan genereres dynamisk baseret på enheder, der er tilgængelige for en given bruger. Nogle få vigtige overvejelser i forbindelse med dynamiske navigationstabeller omfatter:

  • Fejlhåndtering for at sikre en god oplevelse for brugere, der ikke har adgang til bestemte slutpunkter.
  • Nodeevaluering er som standard doven. bladnoder evalueres ikke, før den overordnede node er udvidet. Visse implementeringer af dynamiske navigationstabeller på flere niveauer kan resultere i en ivrig evaluering af hele træet. Sørg for at overvåge antallet af kald, som Power Query foretager, når navigationstabellen gengives i starten. Table.InsertRows er f.eks. 'doven' end Table.FromRecords, da den ikke behøver at evaluere argumenterne.