Dela via


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.

TripPin-navigeringstabellen.

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:

Ett exempel på ett platt navigeringstabell.

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:

Ett exempel på en hierarkisk navigeringstabell.

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.