Hantera navigering
Navigeringstabeller (eller navigeringstabeller) är en viktig del av att tillhandahålla en användarvänlig upplevelse för din anslutningsapp. Power Query-upplevelsen visar dem för användaren när de har angett nödvändiga parametrar för din datakällafunktion och har autentiserats med datakällan.
I bakgrunden är en navigeringstabell bara ett vanligt M-tabellvärde med specifika metadatafält som definierats på dess typ. När datakällans funktion returnerar en tabell med de här fälten definierade visar Power Query navigatörsdialogrutan. Du kan faktiskt se underliggande data som ett tabellvärde genom att högerklicka på rotnoden och välja Redigera.
Table.ToNavigationTable
Du kan använda Table.ToNavigationTable
funktionen för att lägga till de tabelltypsmetadata som behövs för att skapa en navigeringstabell.
Kommentar
För närvarande måste du kopiera och klistra in den här funktionen i M-tillägget. I framtiden kommer den troligen att flyttas till M-standardbiblioteket.
I följande tabell beskrivs parametrarna för den här funktionen:
Parameter | Details |
---|---|
table | Navigeringstabellen. |
keyColumns | Lista över kolumnnamn som fungerar som primärnyckel för navigeringstabellen. |
nameColumn | Namnet på kolumnen som ska användas som visningsnamn i navigatören. |
dataColumn | Namnet på kolumnen som innehåller tabellen eller funktionen som ska visas. |
itemKindColumn | Namnet på kolumnen som ska användas för att fastställa vilken typ av ikon som ska visas. Se nedan för listan över giltiga värden för kolumnen. |
itemNameColumn | Namnet på kolumnen som ska användas för att fastställa förhandsgranskningsbeteendet. Detta är vanligtvis inställt på samma värde som itemKind. |
isLeafColumn | Namnet på kolumnen som används för att avgöra om det här är en lövnod eller om noden kan expanderas så att den innehåller en annan navigeringstabell. |
Funktionen lägger till följande metadata i tabelltypen:
Fält | Parameter |
---|---|
NavigationTable.NameColumn | nameColumn |
NavigationTable.DataColumn | dataColumn |
NavigationTable.ItemKindColumn | itemKindColumn |
NavigationTable.IsLeafColumn | isLeafColumn |
Preview.DelayColumn | itemNameColumn |
Värden för ItemKind
Var och en av följande objekttypsvärden ger en annan ikon i navigeringstabellen.
- Feed
- Databas
- DatabaseServer
- Dimension
- Register
- Mapp
- Funktion
- Visa
- Blad
- DefinedName
- Post
Exempel
Platt navigeringstabell
Följande kodexempel visar en platt navigeringstabell med tre tabeller och 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"}});
Den här koden resulterar i följande navigatorvisning i Power BI Desktop:
Navigeringstabell på flera nivåer
Du kan använda kapslade navigeringstabeller för att skapa en hierarkisk vy över datauppsättningen. Du gör detta genom att ange värdet för raden IsLeaf
till false
(som markerar den som en nod som kan expanderas) och formatera kolumnen så att den Data
även är en annan navigeringstabell.
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;
Den här koden skulle resultera i följande navigatorvisning i Power BI Desktop:
Dynamiska navigeringstabeller
Mer komplexa funktioner kan byggas utifrån dessa grunder. Alla ovanstående exempel visar hårdkodade entiteter i navigeringstabellen, men det är lätt att se hur en navigeringstabell kan genereras dynamiskt baserat på entiteter som är tillgängliga för en viss användare. Några viktiga överväganden för dynamiska navigeringstabeller är:
- Felhantering för att säkerställa en bra upplevelse för användare som inte har åtkomst till vissa slutpunkter.
- Nodutvärderingen är lat som standard. lövnoder utvärderas inte förrän den överordnade noden har expanderats. Vissa implementeringar av dynamiska navigeringstabeller på flera nivåer kan resultera i en ivrig utvärdering av hela trädet. Se till att övervaka antalet anrop som Power Query gör när det ursprungligen renderar navigeringstabellen. Till exempel är Table.InsertRows "latare" än Table.FromRecords, eftersom det inte behöver utvärdera argumenten.