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.
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:
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:
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.