Condividi tramite


Gestione dello spostamento

Le tabelle di spostamento (o le tabelle di spostamento) sono una parte fondamentale di offrire un'esperienza intuitiva per il connettore. L'esperienza di Power Query li visualizza all'utente dopo aver immesso i parametri necessari per la funzione dell'origine dati e aver eseguito l'autenticazione con l'origine dati.

Tabella di spostamento TripPin.

Dietro le quinte, una tabella di spostamento è solo un normale valore di tabella M con campi di metadati specifici definiti nel relativo tipo. Quando la funzione origine dati restituisce una tabella con questi campi definiti, Power Query visualizzerà la finestra di dialogo strumento di navigazione. È effettivamente possibile visualizzare i dati sottostanti come valore di tabella facendo clic con il pulsante destro del mouse sul nodo radice e scegliendo Modifica.

Table.ToNavigationTable

È possibile usare la Table.ToNavigationTable funzione per aggiungere i metadati del tipo di tabella necessari per creare una tabella di spostamento.

Nota

È attualmente necessario copiare e incollare questa funzione nell'estensione M. In futuro sarà probabilmente spostato nella libreria standard M.

La tabella seguente descrive i parametri per questa funzione:

Parametro Dettagli
table Tabella di spostamento.
Keycolumns Elenco di nomi di colonna che fungono da chiave primaria per la tabella di spostamento.
Namecolumn Nome della colonna che deve essere utilizzata come nome visualizzato nello strumento di navigazione.
Datacolumn Nome della colonna contenente la tabella o la funzione da visualizzare.
itemKindColumn Nome della colonna da utilizzare per determinare il tipo di icona da visualizzare. Vedere di seguito per l'elenco di valori validi per la colonna.
itemNameColumn Nome della colonna da utilizzare per determinare il comportamento di anteprima. Questo valore viene in genere impostato sullo stesso valore di itemKind.
isLeafColumn Nome della colonna utilizzata per determinare se si tratta di un nodo foglia o se il nodo può essere espanso per contenere un'altra tabella di spostamento.

La funzione aggiunge i metadati seguenti al tipo di tabella:

Campo Parametro
NavigationTable.NameColumn Namecolumn
NavigationTable.DataColumn Datacolumn
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Valori per ItemKind

Ognuno dei valori del tipo di elemento seguente fornisce un'icona diversa nella tabella di spostamento.

  • Feed
  • Database
  • DatabaseServer
  • Dimensione
  • Tabella
  • Cartella
  • Funzione
  • Visualizza
  • Foglio
  • DefinedName
  • Registra

Esempi

Tabella di spostamento flat

Nell'esempio di codice seguente viene visualizzata una tabella di spostamento flat con tre tabelle e una funzione.

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

Questo codice comporterà la visualizzazione dello strumento di navigazione seguente in Power BI Desktop:

Esempio di tabella di spostamento flat.

Tabella di spostamento a più livelli

È possibile usare le tabelle di spostamento nidificate per creare una visualizzazione gerarchica sul set di dati. A tale scopo, impostare il IsLeaf valore di tale riga su false (che lo contrassegna come nodo che può essere espanso) e formattare la Data colonna come un'altra tabella di spostamento.

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;

Questo codice comporterà la visualizzazione dello strumento di navigazione seguente in Power BI Desktop:

Esempio di tabella di spostamento gerarchica.

Tabelle di spostamento dinamiche

Le funzionalità più complesse possono essere create da queste nozioni di base. Anche se tutti gli esempi precedenti mostrano entità hardcoded nella tabella di spostamento, è facile vedere in che modo una tabella di spostamento può essere generata in modo dinamico in base alle entità disponibili per un determinato utente. Alcune considerazioni chiave per le tabelle di spostamento dinamiche includono:

  • Gestione degli errori per garantire un'esperienza ottimale per gli utenti che non hanno accesso a determinati endpoint.
  • La valutazione del nodo è differita per impostazione predefinita; I nodi foglia non vengono valutati finché il nodo padre non viene espanso. Alcune implementazioni di tabelle di spostamento dinamiche multilivello possono comportare una valutazione eager dell'intero albero. Assicurarsi di monitorare il numero di chiamate effettuate da Power Query durante il rendering iniziale della tabella di spostamento. Ad esempio, Table.InsertRows è "lazier" rispetto a Table.FromRecords, perché non è necessario valutarne gli argomenti.