Udostępnij za pomocą


Obsługa nawigacji

Tabele nawigacji (lub tabele „nav”) są główną częścią zapewniania przyjaznego dla użytkownika środowiska łącznika. Środowisko Power Query wyświetla je użytkownikowi po podaniu wymaganych parametrów dla funkcji źródła danych i uwierzytelnieniu w źródle danych.

Tabela nawigacji TripPin.

W tle tabela nawigacji jest po prostu zwykłą wartością tabeli języka M z określonymi polami metadanych zdefiniowanymi na jej typie. Gdy funkcja źródła danych zwraca tabelę ze zdefiniowanymi polami, Power Query wyświetli okno dialogowe nawigatora. Dane bazowe można wyświetlić jako wartość tabeli, klikając prawym przyciskiem myszy węzeł główny i wybierając polecenie Edytuj.

Table.ToNavigationTable

Możesz użyć Table.ToNavigationTable funkcji , aby dodać metadane typu tabeli potrzebne do utworzenia tabeli nawigacji.

Uwaga / Notatka

Obecnie musisz skopiować i wkleić tę funkcję do rozszerzenia M. W przyszłości prawdopodobnie zostanie przeniesiony do standardowej biblioteki M.

W poniższej tabeli opisano parametry tej funkcji:

Parameter Szczegóły
tabela Tabela nawigacji.
keyColumns Lista nazw kolumn, które działają jako klucz podstawowy dla tabeli nawigacji.
nameColumn Nazwa kolumny, która powinna być używana jako nazwa wyświetlana w nawigatorze.
dataColumn Nazwa kolumny zawierającej tabelę lub funkcję do wyświetlenia.
itemKindColumn Nazwa kolumny, która ma być używana do określenia typu ikony do wyświetlenia. Poniżej znajduje się lista prawidłowych wartości dla kolumny.
itemNameColumn Nazwa kolumny używanej do określania zachowania podglądu. Zazwyczaj jest to taka sama wartość jak itemKind.
isLeafColumn Nazwa kolumny używanej do określenia, czy jest to węzeł liścia, czy węzeł można rozwinąć, aby zawierał inną tabelę nawigacji.

Funkcja dodaje następujące metadane do typu tabeli:

(No changes needed) Parameter
NavigationTable.NameColumn nameColumn
NavigationTable.DataColumn dataColumn
KolumnaRodzajuElementuNavigacji itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Wartości elementu ItemKind

Każda z następujących wartości rodzaju elementu udostępnia inną ikonę w tabeli nawigacji.

  • Karmić
  • Baza danych
  • DatabaseServer
  • Wymiar
  • Tabela
  • Folder
  • Funkcja
  • View
  • Arkusz
  • Nazwa zdefiniowana
  • Rekord

Przykłady

Tabela nawigacji płaskiej

Poniższy przykładowy kod przedstawia płaską tabelę nawigacji z trzema tabelami i funkcją.

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"}});

Ten kod spowoduje wyświetlenie następującego nawigatora w programie Power BI Desktop:

Przykład tabeli nawigacji płaskiej.

Tabela nawigacji na wielu poziomach

Istnieje możliwość użycia zagnieżdżonych tabel nawigacji w celu utworzenia widoku hierarchicznego dla zestawu danych. W tym celu należy ustawić wartość IsLeaf dla tego wiersza na false (co oznacza go jako węzeł, który można rozwinąć), a kolumnę Data sformatować jako dodatkową tabelę nawigacyjną.

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;

Ten kod spowoduje wyświetlenie następującego nawigatora w programie Power BI Desktop:

Przykład tabeli nawigacji hierarchicznej.

Dynamiczne tabele nawigacji

Bardziej złożone funkcje można utworzyć na podstawie tych podstaw. We wszystkich powyższych przykładach pokazano trwale zakodowane jednostki w tabeli nawigacji, ale łatwo zobaczyć, jak tabela nawigacji może być generowana dynamicznie na podstawie jednostek, które są dostępne dla danego użytkownika. Oto kilka kluczowych zagadnień dotyczących tabel nawigacji dynamicznej:

  • Obsługa błędów w celu zapewnienia dobrego doświadczenia dla użytkowników, którzy nie mają dostępu do niektórych punktów końcowych.
  • Ewaluacja węzła jest domyślnie opóźniona; węzły liścia nie są ewaluowane do momentu rozwinięcia węzła nadrzędnego. Niektóre implementacje wielowymiarowych dynamicznych tabel nawigacji mogą spowodować chętną ocenę całego drzewa. Pamiętaj, aby monitorować liczbę wywołań, które program Power Query wykonuje, ponieważ początkowo renderuje tabelę nawigacji. Na przykład funkcja Table.InsertRows jest "lazier" niż Table.FromRecords, ponieważ nie musi oceniać swoich argumentów.