Compartilhar via


Como gerenciar a navegação

As tabelas de navegação (ou tabelas nav) são uma parte essencial do fornecimento de uma experiência amigável para o conector. A experiência Power Query exibe as tabelas nav ao usuário depois que ele insere todos os parâmetros obrigatórios na função da fonte de dados e se autentica na fonte de dados.

A tabela de navegação TripPin.

Nos bastidores, a tabela nav é apenas um valor normal da tabela M com campos de metadados específicos definidos em seu Tipo. Quando a função de fonte de dados retornar uma tabela com esses campos definidos, Power Query exibirá a caixa de diálogo do navegador. Você poderá ver os dados subjacentes como um valor da tabela ao clicar com o botão direito do mouse no nó raiz e selecionar Editar.

Table.ToNavigationTable

Use a função Table.ToNavigationTable para adicionar os metadados do tipo de tabela necessários para criar uma tabela nav.

Observação

Atualmente, você precisa copiar e colar essa função na sua extensão M. No futuro, ela provavelmente será movida para a biblioteca padrão M.

A tabela a seguir descreve os parâmetros desta função:

Parâmetro Detalhes
tabela Sua tabela de navegação.
keyColumns Lista de nomes de coluna que atuam como chave primária na sua tabela de navegação.
nameColumn Nome da coluna que deve ser usada como o nome de exibição no navegador.
dataColumn Nome da coluna que contém a tabela ou a função exibida.
itemKindColumn O nome da coluna usada para determinar o tipo de ícone a ser exibido. Veja abaixo a lista de valores válidos para a coluna.
itemNameColumn Nome da coluna a ser usada para determinar o comportamento da visualização. Geralmente é definido com o mesmo valor do itemKind.
isLeafColumn O nome da coluna usada para determinar se esse é um nó folha ou se o nó pode ser expandido para mostrar outra tabela de navegação.

A função adiciona os seguintes metadados ao tipo de tabela:

Campo Parâmetro
NavigationTable.NameColumn nameColumn
NavigationTable.DataColumn dataColumn
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Valores de ItemKind

Cada um dos seguintes valores de tipo de item fornece um ícone diferente na tabela de navegação.

  • Feed
  • Backup de banco de dados
  • DatabaseServer
  • Dimensão
  • Tabela
  • Pasta
  • Função
  • Exibir
  • Folha
  • DefinedName
  • Registro

Exemplos

Tabela de navegação simples

O exemplo de código a seguir exibe uma tabela de navegação simples com três tabelas e uma função.

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

Esse código resultará na seguinte exibição do Navegador no Power BI Desktop:

Amostra de uma tabela de navegação simples.

Tabela de navegação com vários níveis

É possível usar tabelas de navegação aninhadas para criar uma exibição hierárquica do conjunto de dados. Para fazer isso, defina o valor IsLeaf dessa linha como false (o que o marca como um nó que pode ser expandido) e formate a coluna Data para também ser outra tabela nav.

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;

Esse código resultará na seguinte exibição do Navegador no Power BI Desktop:

Amostra de uma tabela de navegação hierárquica.

Tabelas de navegação dinâmica

Essa funcionalidade mais complexa pode ser criada a partir desses conceitos básicos. Embora todos os exemplos acima mostrem entidades explicitamente incluídas no código na tabela nav, é fácil ver como uma tabela nav pode ser gerada de forma dinâmica com base nas entidades que estão disponíveis para um determinado usuário. Algumas considerações importantes para tabelas de navegação dinâmica incluem:

  • Tratamento de erros para garantir uma boa experiência para os usuários que não têm acesso a determinados pontos de extremidade.
  • A avaliação do nó é lenta por padrão. Nós folha não são avaliados até que o nó pai seja expandido. Determinadas implementações de tabelas de navegação dinâmica de vários níveis podem resultar em uma avaliação apressada de toda a árvore. Lembre-se de monitorar o número de chamadas que o Power Query está fazendo, pois ele renderiza inicialmente a tabela de navegação. Por exemplo, Table.InsertRows é "mais simples" do que Table.FromRecords, pois não precisa avaliar seus argumentos.