Compartir a través de


Manejo de la navegación

Las tablas de navegación (o tablas de navegación) son una parte fundamental de proporcionar una experiencia de usuario amigable para su conector. La experiencia de Power Query se muestra al usuario después de que haya ingresado todos los parámetros necesarios para la función de origen de datos y se haya autenticado con el origen de datos.

La tabla de navegación TripPin.

En segundo plano, una tabla de navegación es simplemente un valor de tabla M normal con campos de metadatos específicos definidos en su tipo. Cuando la función de origen de datos devuelve una tabla con estos campos definidos, Power Query mostrará el cuadro de diálogo del navegador. En realidad, puede ver los datos subyacentes como un valor de tabla haciendo clic con el botón derecho en el nodo raíz y seleccionando Editar.

Table.ToNavigationTable

Puede usar la Table.ToNavigationTable función para agregar los metadatos de tipo de tabla necesarios para crear una tabla de navegación.

Nota:

Actualmente, debe copiar y pegar esta función en la extensión M. En el futuro, es probable que se mueva a la biblioteca estándar de M.

En la tabla siguiente se describen los parámetros de esta función:

Parámetro Detalles
table La tabla de navegación.
keyColumns Lista de nombres de columna que actúan como clave principal para la tabla de navegación.
nameColumn Nombre de la columna que se debe usar como nombre para mostrar en el navegador.
dataColumn Nombre de la columna que contiene la tabla o función que se va a mostrar.
itemKindColumn Nombre de la columna que se va a usar para determinar el tipo de icono que se va a mostrar. Consulte a continuación la lista de valores válidos para la columna.
itemNameColumn Nombre de la columna que se va a usar para determinar el comportamiento de la vista previa. Normalmente, se establece en el mismo valor que itemKind.
isLeafColumn Nombre de la columna utilizada para determinar si se trata de un nodo hoja o si el nodo se puede expandir para contener otra tabla de navegación.

La función agrega los metadatos siguientes al tipo de tabla:

Campo Parámetro
TablaDeNavegación.ColumnaNombre nameColumn
NavigationTable.DataColumn dataColumn
TablaNavegación.ColumnaTipoElemento itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Vista previa.ColumnaDeRetraso itemNameColumn

Valores de ItemKind

Cada uno de los siguientes valores de tipo de elemento proporciona un icono diferente en la tabla de navegación.

  • Fuente
  • Base de datos
  • Servidor de Base de Datos
  • Dimensión
  • Table
  • Carpeta
  • Función
  • Ver
  • Sheet
  • NombreDefinido
  • Registro

Examples

Tabla de navegación plana

En el ejemplo de código siguiente se muestra una tabla de navegación plana con tres tablas y una función.

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

Este código dará como resultado la siguiente presentación del navegador en Power BI Desktop:

Ejemplo de una tabla de navegación plana.

Tabla de navegación de varios niveles

Es posible usar tablas de navegación anidadas para crear una vista jerárquica sobre el conjunto de datos. Para ello, establezca el valor de esa fila en IsLeaffalse (que lo marca como un nodo que se puede expandir) y dé formato a la columna Data para que también se configure como otra tabla de navegación.

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;

Este código daría lugar a la siguiente visualización del navegador en Power BI Desktop:

Ejemplo de una tabla de navegación jerárquica.

Tablas de navegación dinámica

Se puede crear una funcionalidad más compleja a partir de estos conceptos básicos. Aunque todos los ejemplos anteriores muestran entidades codificadas de forma rígida en la tabla de navegación, es fácil ver cómo se podría generar una tabla de navegación dinámicamente en función de las entidades que están disponibles para un usuario determinado. Algunas consideraciones clave para las tablas de navegación dinámica son:

  • Control de errores para garantizar una buena experiencia para los usuarios que no tienen acceso a determinados puntos de conexión.
  • La evaluación del nodo es perezosa por defecto; los nodos hoja no se evalúan hasta que se expanda el nodo padre. Algunas implementaciones de tablas de navegación dinámica de varios niveles pueden dar lugar a una evaluación diligente de todo el árbol. Asegúrese de monitorear el número de llamadas que realiza Power Query cuando inicialmente muestra la tabla de navegación. Por ejemplo, Table.InsertRows es "lazier" que Table.FromRecords, ya que no es necesario evaluar sus argumentos.