Обработка навигации
Таблицы навигации (или таблицы навигации) являются основной частью предоставления удобного интерфейса для соединителя. Интерфейс Power Query отображает их пользователю после ввода необходимых параметров для функции источника данных и проверки подлинности с помощью источника данных.
За кулисами таблица навигации — это просто обычное значение таблицы M с определенными полями метаданных, определенными в типе. Когда функция источника данных возвращает таблицу с этими полями, Power Query отобразит диалоговое окно навигатора. На самом деле базовые данные можно увидеть как значение таблицы, щелкнув правой кнопкой мыши корневой узел и выбрав "Изменить".
Table.ToNavigationTable
Функцию Table.ToNavigationTable
можно использовать для добавления метаданных типа таблицы, необходимых для создания таблицы навигации.
Примечание.
В настоящее время необходимо скопировать и вставить эту функцию в расширение M. В будущем она, скорее всего, будет перенесена в стандартную библиотеку M.
В следующей таблице описаны параметры для этой функции:
Параметр | Сведения |
---|---|
table | Таблица навигации. |
Keycolumns | Список имен столбцов, которые служат первичным ключом для таблицы навигации. |
nameColumn | Имя столбца, который должен использоваться в качестве отображаемого имени в навигаторе. |
Datacolumn | Имя столбца, содержащего отображаемую таблицу или функцию. |
itemKindColumn | Имя столбца, используемого для определения типа отображаемого значка. Ниже приведен список допустимых значений для столбца. |
itemNameColumn | Имя столбца, используемого для определения поведения предварительного просмотра. Обычно это значение имеет то же значение, что и itemKind. |
isLeafColumn | Имя столбца, используемого для определения того, является ли это конечным узлом, или если узел можно развернуть, чтобы содержать другую таблицу навигации. |
Функция добавляет следующие метаданные в тип таблицы:
Поле | Параметр |
---|---|
NavigationTable.NameColumn | nameColumn |
NavigationTable.DataColumn | Datacolumn |
NavigationTable.ItemKindColumn | itemKindColumn |
NavigationTable.IsLeafColumn | isLeafColumn |
Preview.DelayColumn | itemNameColumn |
Значения для ItemKind
Каждое из следующих значений типа элемента предоставляет другой значок в таблице навигации.
- Веб-канал
- База данных
- DatabaseServer
- Измерение
- Таблица
- Папка
- Function
- Представления
- Простыня
- DefinedName
- Запись
Примеры
Плоская таблица навигации
В следующем примере кода отображается плоская таблица навигации с тремя таблицами и функцией.
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"}});
Этот код приведет к отображению следующего навигатора в Power BI Desktop:
Таблица навигации с несколькими уровнями
Для создания иерархического представления над набором данных можно использовать вложенные таблицы навигации. Для этого необходимо задать IsLeaf
для этой строки false
значение (которое помечает его как узел, который можно развернуть), а также отформатируйте Data
столбец в другую таблицу навигации.
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;
Этот код приведет к отображению следующего навигатора в Power BI Desktop:
Динамические таблицы навигации
Более сложные функциональные возможности можно создать на основе этих основных принципов. Во всех приведенных выше примерах отображаются жестко закодированные сущности в таблице навигации, легко увидеть, как таблицу навигации можно создавать динамически на основе сущностей, доступных конкретному пользователю. Ниже приведены некоторые ключевые аспекты для таблиц динамической навигации:
- Обработка ошибок, чтобы обеспечить хороший интерфейс для пользователей, у которых нет доступа к определенным конечным точкам.
- Оценка узла по умолчанию отложена; конечные узлы не оцениваются, пока родительский узел не будет развернут. Некоторые реализации динамических таблиц навигации на нескольких уровнях могут привести к активной оценке всего дерева. Не забудьте отслеживать количество вызовов, которые Выполняет Power Query, так как изначально отображает таблицу навигации. Например, Table.InsertRows является "ленивее", чем Table.FromRecords, так как не требуется оценивать его аргументы.