Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Navigationstabellen (oder Nav-Tabellen) sind ein zentraler Bestandteil der Bereitstellung einer benutzerfreundlichen Erfahrung für Ihren Connector. Die Power Query-Oberfläche zeigt sie dem Benutzer an, nachdem er alle erforderlichen Parameter für die Datenquellenfunktion eingegeben und sich bei der Datenquelle authentifiziert hat.
Hinter den Kulissen ist eine Navigationstabelle nur ein regulärer M-Tabellenwert mit bestimmten Metadatenfeldern, die für den Typ definiert sind. Wenn Ihre Datenquellenfunktion eine Tabelle mit diesen definierten Feldern zurückgibt, zeigt Power Query das Navigatordialogfeld an. Sie können die zugrunde liegenden Daten tatsächlich als Tabellenwert anzeigen, indem Sie mit der rechten Maustaste auf den Stammknoten klicken und "Bearbeiten" auswählen.
Table.ToNavigationTable
Mit der Table.ToNavigationTable Funktion können Sie die Tabellentypmetadaten hinzufügen, die zum Erstellen einer Navigationstabelle erforderlich sind.
Hinweis
Sie müssen diese Funktion derzeit kopieren und in die M-Erweiterung einfügen. In Zukunft wird sie wahrscheinlich in die M-Standardbibliothek verschoben.
In der folgenden Tabelle werden die Parameter für diese Funktion beschrieben:
| Parameter | Einzelheiten |
|---|---|
| Tisch | Ihre Navigationstabelle. |
| keyColumns | Liste der Spaltennamen, die als Primärschlüssel für Die Navigationstabelle fungieren. |
| nameColumn | Der Name der Spalte, die als Anzeigename im Navigator verwendet werden soll. |
| dataColumn | Der Name der Spalte, die die anzuzeigende Tabelle oder Funktion enthält. |
| itemKindColumn | Der Name der Spalte, die verwendet werden soll, um den Anzuzeigenden Symboltyp zu bestimmen. Die Liste der gültigen Werte für die Spalte finden Sie unten. |
| itemNameColumn | Der Name der Spalte, die verwendet werden soll, um das Vorschauverhalten zu bestimmen. Dies wird in der Regel auf denselben Wert wie itemKind festgelegt. |
| isLeafColumn | Der Name der Spalte, die verwendet wird, um festzustellen, ob es sich um einen Blattknoten handelt oder ob der Knoten erweitert werden kann, um eine weitere Navigationstabelle zu enthalten. |
Die Funktion fügt dem Tabellentyp die folgenden Metadaten hinzu:
| Feld | Parameter |
|---|---|
| Navigationstabelle.NameSpalte | nameColumn |
| NavigationTable.DataColumn | dataColumn |
| NavigationsTabelle.ElementArtSpalte | itemKindColumn |
| NavigationTable.IsLeafColumn | isLeafColumn |
| Preview.DelayColumn | itemNameColumn |
Werte für ItemKind
Jeder der folgenden Elementtypwerte stellt ein anderes Symbol in der Navigationstabelle bereit.
- Feed
- Datenbank
- Datenbankserver
- Abmessung
- Table
- Ordner
- Funktion
- Ansicht
- Blatt
- DefinedName
- Datensatz
Examples
Flache Navigationstabelle
Im folgenden Codebeispiel wird eine flache Navigationstabelle mit drei Tabellen und einer Funktion angezeigt.
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"}});
Dieser Code führt zur Anzeige des folgenden Navigators in Power BI Desktop:
Navigationstabelle mit mehreren Ebenen
Es ist möglich, geschachtelte Navigationstabellen zu verwenden, um eine hierarchische Ansicht über Ihren Datensatz zu erstellen. Dazu legen Sie den IsLeaf Wert für diese Zeile false fest (der ihn als Knoten markiert, der erweitert werden kann) und die Data Spalte so formatieren, dass sie auch eine andere Navigationstabelle ist.
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;
Dieser Code würde dazu führen, dass der folgende Navigator in Power BI Desktop angezeigt wird:
Dynamische Navigationstabellen
Komplexere Funktionen können aus diesen Grundlagen erstellt werden. Während alle oben genannten Beispiele hartcodierte Entitäten in der Navigationstabelle zeigen, ist es einfach zu sehen, wie eine Navigationstabelle dynamisch basierend auf Entitäten generiert werden kann, die für einen bestimmten Benutzer verfügbar sind. Zu den wichtigsten Überlegungen für dynamische Navigationstabellen gehören:
- Fehlerbehandlung , um eine gute Benutzererfahrung für Benutzer sicherzustellen, die keinen Zugriff auf bestimmte Endpunkte haben.
- Die Knotenauswertung erfolgt standardmäßig träge; Blattknoten werden erst ausgewertet, wenn der übergeordnete Knoten erweitert wird. Bestimmte Implementierungen dynamischer Navigationstabellen mit mehreren Ebenen können zu einer vorschnellen Auswertung des gesamten Baums führen. Achten Sie darauf, die Anzahl der Aufrufe zu überwachen, die Power Query beim ersten Rendern der Navigationstabelle vornimmt. Beispielsweise ist "Table.InsertRows " "lazier" als "Table.FromRecords", da die Argumente nicht ausgewertet werden müssen.