|
|||||||
СОБРАТЬ ДАННЫЕ С ТАБЛИЦ С ИЗМЕНЯЮЩИМИСЯ СТОЛБЦАМИ В POWERQUERY
Время создания: 17.03.2022 11:34
Текстовые метки: Power Query, ExpandTableColumn
Раздел: Разные закладки - MSO - Excel - Power Query
Запись: xintrea/mytetra_db_adgaver_new/master/base/1647506073qut3rcu68z/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
#"Развернутый элемент Data" = Table.ExpandTableColumn(old_step, "Data", Table.ColumnNames(old_step{0}[Data]), Table.ColumnNames(old_step{0}[Data]))
ColNames = Table.AddColumn(#"Удаленные столбцы1", "cols", each Table.ColumnNames([Data]), type list), allCols = List.Sort(List.Distinct(List.Combine(ColNames[cols]))), #"Развернутый элемент Data" = Table.ExpandTableColumn(#"Удаленные столбцы1", "Data", allCols, allCols) in #"Развернутый элемент Data"
ColNames = Table.AddColumn(#"Удаленные столбцы1", "cols", each Table.ColumnNames([Data]), type list) - этой строкой мы создаем новый пользовательский столбец, в котором перечислены имена столбцов всех таблиц(each Table.ColumnNames([Data])) allCols = List.Distinct(List.Combine(ColNames[cols])) - здесь мы объединяем все столбцы в один список(List.Combine(ColNames[cols])) и удаляем из списка дубликаты(List.Distinct). Кстати, один из известных спецов по Power Query Максим Зеленский предложил более изящный вариант этой строки: allCols = List.Union(ColNames[cols]). Получается даже чем-то лучше, т.к. столбцы располагаются в более правильном порядке. #"Развернутый элемент Data" = Table.ExpandTableColumn(#"Удаленные столбцы1", "Data", allCols, allCols) - это по сути та же строка, что в исходном запросе, но имена столбцов сюда уже подставляются только те, которые есть в таблицах для выгрузки. Полностью запрос теперь выглядит так:
Полностью запрос теперь выглядит так: let Источник = Folder.Files("G:\Работа с Excel\1_PowerQuery\PowerQuery таблицы с разными столбцами"), #"Строки с примененным фильтром" = Table.SelectRows(Источник, each ([Extension] = ".xlsx")), #"Удаленные столбцы" = Table.RemoveColumns( #"Строки с примененным фильтром", {"Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"} ), #"Добавлен пользовательский объект" = Table.AddColumn(#"Удаленные столбцы", "Данные", each Excel.Workbook([Content])), #"Развернутый элемент Данные" = Table.ExpandTableColumn( #"Добавлен пользовательский объект", "Данные", {"Name", "Data", "Item", "Kind", "Hidden"}, {"Name.1", "Data", "Item", "Kind", "Hidden"} ), #"Строки с примененным фильтром1" = Table.SelectRows(#"Развернутый элемент Данные", each ([Kind] = "Table")), #"Удаленные столбцы1" = Table.RemoveColumns(#"Строки с примененным фильтром1", {"Name.1", "Item", "Kind", "Hidden"}), ColNames = Table.AddColumn(#"Удаленные столбцы1", "cols", each Table.ColumnNames([Data]), type list), allCols = List.Sort(List.Distinct(List.Combine(ColNames[cols]))), #"Развернутый элемент Data" = Table.ExpandTableColumn(#"Удаленные столбцы1", "Data", allCols, allCols) in #"Развернутый элемент Data"
Теперь какие бы таблицы мы не кидали в папку - запрос получит из них данные без дополнительных действий с нашей стороны. Но не стоит забывать: если дальше в запросе так же идет обращение к столбцам, которые могут изменяться - это тоже придется учесть в запросе и так же составлять некие "динамические" заголовки.
|
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|