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.
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:
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:
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.