Teilen über


Umgang mit Navigation

Navigationstabellen (oder Navigationstabellen) sind ein zentraler Bestandteil der Bereitstellung einer benutzerfreundlichen Benutzeroberfläche 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.

Die TripPin-Navigationstabelle.

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 Details
table 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
NavigationTable.NameColumn nameColumn
NavigationTable.DataColumn dataColumn
NavigationTable.ItemKindColumn 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
  • DatabaseServer
  • Dimension
  • Tabelle
  • Ordner
  • Funktion
  • Ansicht
  • Tabelle
  • DefinedName
  • Datensatz

Beispiele

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:

Beispiel für eine flache Navigationstabelle.

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 zu folgender Navigator-Anzeige in Power BI Desktop führen:

Ein Beispiel für eine hierarchische Navigationstabelle.

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 ist standardmäßig faul; Blattknoten werden erst ausgewertet, wenn der übergeordnete Knoten erweitert wird. Bestimmte Implementierungen dynamischer Navigationstabellen mit mehreren Ebenen können zu einer begierigen Bewertung der gesamten Struktur führen. Achten Sie darauf, die Anzahl der Aufrufe zu überwachen, die Power Query beim ersten Rendern der Navigationstabelle vornimmt. Beispielsweise ist Table.InsertRows "fauler" als Table.FromRecords, da die Argumente nicht ausgewertet werden müssen.