Del via


Håndtering av navigasjon

Navigasjonstabeller (eller navigasjonstabeller) er en sentral del av å gi en brukervennlig opplevelse for koblingen. Power Query-opplevelsen viser dem til brukeren etter at de har angitt eventuelle nødvendige parametere for datakildefunksjonen, og har godkjent med datakilden.

TripPin-navigasjonstabellen.

Bak kulissene er en navigasjonstabell bare en vanlig M-tabellverdi med bestemte metadatafelt definert på typen. Når datakildefunksjonen returnerer en tabell med disse feltene definert, viser Power Query dialogboksen navigatør. Du kan faktisk se de underliggende dataene som en tabellverdi ved å høyreklikke på rotnoden og velge Rediger.

Table.ToNavigationTable

Du kan bruke Table.ToNavigationTable funksjonen til å legge til metadataene for tabelltypen som kreves for å opprette en navigasjonstabell.

Merk

Du må for øyeblikket kopiere og lime inn denne funksjonen i M-utvidelsen. I fremtiden vil det sannsynligvis bli flyttet inn i M-standardbiblioteket.

Tabellen nedenfor beskriver parameterne for denne funksjonen:

Parameter Detaljer
tabellen Navigasjonstabellen.
keyColumns Liste over kolonnenavn som fungerer som primærnøkkelen for navigasjonstabellen.
nameColumn Navnet på kolonnen som skal brukes som visningsnavn i navigatøren.
Datacolumn Navnet på kolonnen som inneholder tabellen eller funksjonen som skal vises.
itemKindColumn Navnet på kolonnen som skal brukes til å bestemme hvilken type ikon som skal vises. Se nedenfor for listen over gyldige verdier for kolonnen.
itemNameColumn Navnet på kolonnen som skal brukes til å bestemme virkemåten for forhåndsvisning. Dette er vanligvis satt til samme verdi som itemKind.
isLeafColumn Navnet på kolonnen som brukes til å avgjøre om dette er en bladnode, eller om noden kan utvides til å inneholde en annen navigasjonstabell.

Funksjonen legger til følgende metadata i tabelltypen:

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

Verdier for ItemKind

Hver av de følgende elementtypeverdiene gir et annet ikon i navigasjonstabellen.

  • Feed
  • Database
  • Databaseserver
  • Dimensjon
  • Table
  • Mappe
  • Function
  • Visning
  • Ark
  • DefinedName
  • Spill inn

Eksempler

Flat navigasjonstabell

Følgende kodeeksempel viser en flat navigasjonstabell med tre tabeller og en funksjon.

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

Et eksempel på en flat navigasjonstabell.

Navigasjonstabell på flere nivåer

Det er mulig å bruke nestede navigasjonstabeller til å opprette en hierarkisk visning over datasettet. Du gjør dette ved å angi verdien for denne raden til false (som markerer den IsLeaf som en node som kan utvides), og formater Data kolonnen til også å være en annen navigasjonstabell.

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

Et eksempel på en hierarkisk navigasjonstabell.

Dynamiske navigasjonstabeller

Mer komplisert funksjonalitet kan bygges fra disse grunnleggende funksjonene. Selv om alle eksemplene ovenfor viser hardkodede enheter i navigasjonstabellen, er det enkelt å se hvordan en navigasjonstabell kan genereres dynamisk basert på enheter som er tilgjengelige for en gitt bruker. Noen viktige hensyn for dynamiske navigasjonstabeller inkluderer:

  • Feilbehandling for å sikre en god opplevelse for brukere som ikke har tilgang til bestemte endepunkter.
  • Nodeevaluering er lat som standard. bladnoder evalueres ikke før den overordnede noden er utvidet. Enkelte implementeringer av dynamiske navigasjonstabeller på flere nivåer kan resultere i en ivrig evaluering av hele treet. Pass på å overvåke antall kall som Power Query foretar når den i utgangspunktet gjengir navigasjonstabellen. Table.InsertRows er for eksempel «lazier» enn Table.FromRecords, da den ikke trenger å evaluere argumentene.