Del via


Håndtering af navigation

Navigationstabeller (eller navigationstabeller) er en kernekomponent i at give en brugervenlig oplevelse for din connector. Power Query-oplevelsen viser dem til brugeren, efter de har indtastet eventuelle nødvendige parametre til din datakildefunktion og er autentificeret med datakilden.

TripPin-navigationstabellen.

Bag kulisserne er en navigationstabel blot en almindelig M-tabelværdi med specifikke metadatafelter defineret på dens type. Når din datakildefunktion returnerer en tabel med disse felter defineret, vil Power Query vise navigatordialogen. Du kan faktisk se de underliggende data som en Tabel-værdi ved at højreklikke på rod-noden og vælge Rediger.

Table.ToNavigationTable

Du kan bruge Table.ToNavigationTable funktionen til at tilføje den tabeltypemetadata, der er nødvendig for at oprette en navigationstabel.

Notat

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

Følgende tabel beskriver parametrene for denne funktion:

Parameter Oplysninger
tabel Din navigationstabel.
keyColumns Liste over kolonnenavne, der fungerer som primærnøgle for din navigationstabel.
nameKolonne Navnet på den kolonne, der skal bruges som visningsnavn i navigatoren.
dataKolonne Navnet på kolonnen, der indeholder tabellen eller funktionen, der skal vises.
itemKindColumn Navnet på kolonnen, der skal bruges til at bestemme typen af ikon, der skal vises. Se nedenfor for listen over gyldige værdier for kolonnen.
itemNameKolonne Navnet på kolonnen, der skal bruges til at bestemme forhåndsvisningsadfærden. Dette sættes typisk til samme værdi som itemKind.
isLeafColumn Navnet på kolonnen, der bruges til at afgøre, om dette er en bladnode, eller om noden kan udvides til at indeholde en anden navigationstabel.

Funktionen tilføjer følgende metadata til tabeltypen:

Felt Parameter
NavigationTable.NameColumn nameKolonne
NavigationTable.DataColumn dataKolonne
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameKolonne

Værdier for ItemKind

Hver af følgende værdier for objekttype giver et forskelligt ikon i navigationstabellen.

  • Fodre
  • Database
  • DatabaseServer
  • Dimension
  • Tabel
  • Folder
  • Funktion
  • Vis
  • Lagen
  • DefinedName
  • Post

Eksempler

Flad navigationstabel

Følgende kodeeksempel viser 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 vil resultere i følgende Navigator-visning i Power BI Desktop:

Et eksempel på en flad navigationstabel.

Flerniveau-navigationstabel

Det er muligt at bruge indlejrede navigationstabeller til at skabe en hierarkisk visning over dit datasæt. Du gør dette ved at sætte værdien IsLeaf for den række til false (hvilket 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 vil resultere i følgende Navigator-visning i Power BI Desktop:

Et eksempel på en hierarkisk navigationstabel.

Dynamiske navigationstabeller

Mere kompleks funktionalitet kan bygges ud fra disse grundlæggende elementer. Selvom alle ovenstående eksempler viser hardkodede enheder i navigationstabellen, er det let at se, hvordan en navigationstabel kan genereres dynamisk baseret på enheder, der er tilgængelige for en given bruger. Nogle få vigtige overvejelser for dynamiske navigationstabeller inkluderer:

  • Fejlhåndtering for at sikre en god oplevelse for brugere, der ikke har adgang til visse endepunkter.
  • Nodeevaluering er som udgangspunkt dovent; Bladknudepunkter evalueres ikke, før forældreknuden er udvidet. Visse implementeringer af flerniveau dynamiske navigationstabeller 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 vises i starten. For eksempel er Table.InsertRows 'dovnere' end Table.FromRecords, da den ikke behøver at evaluere sine argumenter.