Compartir a través de


Control de navegación

Las tablas de navegación son una parte fundamental de la fácil experiencia de uso del conector. La experiencia Power Query las muestra al usuario una vez que se hayan escrito los parámetros necesarios para la función origen de datos y se haya autenticado con el origen de datos.

La tabla de navegación TripPin

En realidad, una tabla de navegación es simplemente un valor de tabla M normal con campos de metadatos específicos que se definen en el tipo. Cuando la función origen de datos devuelva una tabla con estos campos definidos, Power Query mostrará el cuadro de diálogo del navegador. Es posible ver los datos subyacentes como un valor de tabla al hacer clic con el botón derecho en el nodo raíz y seleccionar Editar.

Table.ToNavigationTable

Es posible usar la función Table.ToNavigationTable para añadir los metadatos de tipo de tabla necesarios para crear una tabla de navegación.

Nota:

En la actualidad, 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 a continuación se describen los parámetros de la función:

Parámetro Detalles
table La tabla de navegación.
keyColumns Lista de nombres de columna que actúan como la clave principal para la tabla de navegación.
nameColumn El nombre de la columna que se debe usar como nombre para mostrar en el navegador.
dataColumn El nombre de la columna que contiene la tabla o función que se va a mostrar.
itemKindColumn El nombre de la columna que se usará para determinar el tipo de icono que se va a mostrar. Consulte a continuación para obtener la lista de valores válidos para la columna.
itemNameColumn El nombre de la columna que se usará para determinar el comportamiento de la vista previa. Por lo general, el valor es el mismo que itemKind.
isLeafColumn El nombre de la columna que se utiliza 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 añade los metadatos siguientes al tipo de tabla:

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

Valores de ItemKind

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

  • Fuente
  • Base de datos
  • DatabaseServer
  • Dimensión
  • Tabla
  • Carpeta
  • Función
  • Ver
  • Hoja
  • DefinedName
  • Grabar

Ejemplos

Tabla de navegación plana

En el ejemplo de código a continuación 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 visualización del navegador en Power BI Desktop tal como se ve a continuación:

Muestra de una tabla de navegación plana.

Tabla de navegación de varios niveles

Es posible utilizar tablas de navegación anidadas para crear una vista jerárquica sobre el conjunto de datos. Para ello, establezca el valor IsLeaf de esa fila en false (que lo marca como un nodo que se puede expandir) y dé formato a la columna Data para que también sea 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 visualización del navegador en Power BI Desktop tal como se ve a continuación:

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

Tablas de navegación dinámica

Es posible crear una funcionalidad más compleja a partir de estos conceptos básicos. Si bien los ejemplos anteriores muestran entidades codificadas de forma rígida en la tabla de navegación, resulta fácil ver cómo se podría generar una tabla de navegación de forma dinámica según las entidades que estén disponibles para el usuario. Entre las principales consideraciones que deben tenerse en cuenta en las tablas de navegación dinámicas figuran las siguientes:

  • Control de errores para garantizar una experiencia satisfactoria para los usuarios que no tengan acceso a determinados puntos de conexión.
  • La evaluación del nodo se ralentiza de forma predeterminada; los nodos hoja no se evalúan hasta que se expanda el nodo primario. Algunas implementaciones de tablas de navegación dinámica de varios niveles pueden provocar la evaluación diligente de todo el árbol. Asegúrese de supervisar el número de llamadas que realiza Power Query, dado que inicialmente representa la tabla de navegación. Por ejemplo, Table.InsertRows es más "lenta" que Table.FromRecords, ya que no es necesario evaluar los argumentos.