Добрый день. В Power Query имеется запрос такого плана (см. файл Вид):
У таблиц первые пять колонок однотипные и имеют одинаковые названия. А вот начиная с шестой могут меняться как названия столбцов, так и их количество. Т.е. в одной таблице может быть восемь столбцов, в другой 12, в третей 14. Названия столбцов могут совпадать, а могут быть и уникальными. Если нажать на кнопку Развернуть, то данные раскрываются коряво: по строкам присутствуют все имена, а вот столбцы многие отсутствуют. Как объединить таблицы так, чтобы отображались все столбцы, что есть в таблицах, а данные таблиц располагались друг под другом?
P.S. Выложила файлы для наглядности. Юг - типы файлов, которые нужно объединить (их таких шесть, но суть у них одна). Тест - файл, в котором пытаюсь сделать запрос на объединение.
1. Вы хотите разово сделать? 2. таблицы из файлов, или из листов файлов, или из листов файла или еще откуда то? 3. при слияние столбцы с разными названиями определяются как разные столбцы, даже строчные прописные вроде имеют значение
-как минимум исходные данные должны быть правильно структурированы иначе так и будут кривые результаты
у меня простая версия Экселя, в ней нет кнопки "Прочитать мысли и сгенерировать файл пример"
1. В идеале, хотелось бы все одним шагом. Но можно и несколькими, главное, чтобы цель была достигнута. 2. Данные получаются из списка файлов в конкретной папке. При этом файлы имеют разное количество листов с разными названиями. Путем различных манипуляций в Power Query они были приведены к общему виду, тип которого представлен на картинке выше. Но вот количество столбцов в них после пятого столбца разное, и названия разные. 3. я тоже надеялась, что при слиянии столбцы с разными названиями будут выводиться как разные, но в итоге при развертывании всех таблиц часть столбцов просто выпадает и не отображается. Я понимаю, что как вариант можно в Power Query по отдельности развернуть все таблицы из списка, а потом объединить их в одну. Но вдруг есть более быстрый способ...
Без примера действительно сложно дать готовый ответ. Что-то вроде этого должно быть в запросе:
Код
ColNames = Table.AddColumn(last_query, "cols", each Table.ColumnNames([Data]), type list),
allCols = List.Sort(List.Distinct(List.Combine(ColNames[cols]))),
result = Table.ExpandTableColumn(last_query, "Data", allCols, allCols)
in
result
Это должно идти после того, как получили содержимое файлов(таблицу для разворота на Вашем скрине).
Отличное решение со столбцом, между прочим List.Sort имхо не нужен тут, если автору первые 5 столбцов нужны на первом месте. И, может быть, List.Union вместо Combine-Distinct? надо проверить
Максим Зеленский написал: может быть, List.Union вместо Combine-Distinct?
Согласен, вчера об этом не подумал, надо попробовать. Да, List.Union очень даже подходит. Главное, чтобы заголовки столбцов не оказались повторяющимися числовыми данными внутри одной таблицы(в случае с умными это в принципе невозможно) Потому как если верить справке - то числовые данные в результате дадут список не уникальных значений.
The_Prist написал: Главное, чтобы заголовки столбцов не оказались повторяющимися
В Power Query это невозможно, названия столбцов в таблице всегда уникальны. Будет добавлен суффикс _N к повторяющимся названиям, если заголовки получены повышением строк.
Да не, ну как это же = поля в записи. Единственный вариант - это когда заголовки не повышены и находятся в строке. Но тогда вообще другое решение нужно
Добрый день. Хотел использовать вариант, который предложил Дмитрий, в своей работе. Вроде все сделал как надо, но таблица после разворота вывела значение null Понятно, что сделал что-то не так. Поправьте плз. Благодарю
Нет, столбец с названиями столбцов без дубликатов я получил Проблема другая, после разворота 3-х листов столбцы подтянулись, но значения в развернутой таблице для всех этих столбцов стали null Вопрос в этом, что не так сделано? Или может мне что-то надо было еще доделать, прежде чем разворачивать таблицы?
По сути я взял файлы из поста #1 В файле Тест есть 2 таблицы "зеленая " -то что выдал мне мой запрос "синяя" - я думал, что результат должен быть таким (пост #3) что я не так сделал?