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