Udostępnij za pośrednictwem


Obsługa nawigacji

Tabele nawigacji (lub tabele nawigacji) są główną częścią zapewniania przyjaznego dla użytkownika środowiska łącznika. Środowisko dodatku Power Query wyświetla je użytkownikowi po wprowadzeniu wymaganych parametrów 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, dodatek 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

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

W poniższej tabeli opisano parametry tej funkcji:

Parametr Szczegóły
table 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, która ma być używana 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:

Pole Parametr
NavigationTable.NameColumn Namecolumn
NavigationTable.DataColumn Datacolumn
NavigationTable.ItemKindColumn 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.

  • Źródło danych
  • baza danych
  • DatabaseServer
  • Wymiar
  • Table
  • Folder
  • Function
  • Widok
  • Arkusz
  • Nazwa zdefiniowana
  • Nagraj

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ć IsLeaf false wartość dla tego wiersza na (co oznacza go jako węzeł, który można rozwinąć) i sformatować kolumnę Data jako kolejną tabelę nawigacji.

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 środowiska dla użytkowników, którzy nie mają dostępu do niektórych punktów końcowych.
  • Ocena węzła jest domyślnie opóźniona; Węzły liścia nie są oceniane 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.