Страницы: 1
RSS
Объединить таблицы с разным количеством столбцов на языке М Power Query
 
Добрый день.
В Power Query имеется запрос такого плана  (см. файл Вид):


У таблиц первые пять колонок однотипные и имеют одинаковые названия. А вот начиная с шестой могут меняться как названия столбцов, так и их количество. Т.е. в одной таблице может быть восемь столбцов, в другой 12, в третей 14. Названия столбцов могут совпадать, а могут быть и уникальными. Если нажать на кнопку Развернуть, то данные раскрываются коряво: по строкам присутствуют все имена, а вот столбцы многие отсутствуют. Как объединить таблицы так, чтобы отображались все столбцы, что есть в таблицах, а данные таблиц располагались друг под другом?

P.S. Выложила файлы для наглядности. Юг - типы файлов, которые нужно объединить (их таких шесть, но суть у них одна). Тест - файл, в котором пытаюсь сделать запрос на объединение.
Изменено: turbidgirl - 07.06.2017 09:47:14
 
1. Вы хотите разово сделать?
2. таблицы из файлов, или из листов файлов, или из листов файла или еще откуда то?
3. при слияние столбцы с разными названиями определяются как разные столбцы, даже строчные прописные вроде имеют значение

-как минимум исходные данные должны быть правильно структурированы иначе так и будут кривые результаты  
у меня простая версия Экселя, в ней нет кнопки "Прочитать мысли и сгенерировать файл пример"
 
1. В идеале, хотелось бы все одним шагом. Но можно и несколькими, главное, чтобы цель была достигнута.
2. Данные получаются из списка файлов в конкретной папке. При этом файлы имеют разное количество листов с разными названиями. Путем различных манипуляций в Power Query они были приведены к общему виду, тип которого представлен на картинке выше. Но вот количество столбцов в них после пятого столбца разное, и названия разные.
3. я тоже надеялась, что при слиянии столбцы с разными названиями будут выводиться как разные, но в итоге при развертывании всех таблиц часть столбцов просто выпадает и не отображается.
Я понимаю, что как вариант  можно в Power Query по отдельности развернуть все таблицы из списка, а потом объединить их в одну. Но вдруг есть более быстрый способ...
 
почитайте
http://www.planetaexcel.ru/techniques/24/2152/
у меня простая версия Экселя, в ней нет кнопки "Прочитать мысли и сгенерировать файл пример"
 
Это простой пример, где количество столбцов во всех файлах одно и тоже. У меня разное.
Изменено: turbidgirl - 07.06.2017 09:47:51
 
Цитата
turbidgirl написал:
Это простой пример...
Это не пример - это описание.
 
Цитата
turbidgirl написал:
Это простой пример
Относилось к
Цитата
Фродо написал:
почитайте
http://www.planetaexcel.ru/techniques/24/2152/
 
Без примера действительно сложно дать готовый ответ.
Что-то вроде этого должно быть в запросе:
Код
    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
Это должно идти после того, как получили содержимое файлов(таблицу для разворота на Вашем скрине).
Изменено: The_Prist - 06.06.2017 22:21:09
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Отличное решение со столбцом, между прочим :) List.Sort имхо не нужен тут, если автору первые 5 столбцов нужны на первом месте. И, может быть, List.Union вместо Combine-Distinct? надо проверить
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
может быть, List.Union вместо Combine-Distinct?
Согласен, вчера об этом не подумал, надо попробовать.
Да, List.Union очень даже подходит. Главное, чтобы заголовки столбцов не оказались повторяющимися числовыми данными внутри одной таблицы(в случае с умными это в принципе невозможно) :) Потому как если верить справке - то числовые данные в результате дадут список не уникальных значений.
Изменено: The_Prist - 07.06.2017 09:20:49
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist , спасибо Вам большое! Все получилось.
Пример файла все равно выложила.
 
Цитата
The_Prist написал:
Главное, чтобы заголовки столбцов не оказались повторяющимися
В Power Query это невозможно, названия столбцов в таблице всегда уникальны. Будет добавлен суффикс _N к повторяющимся названиям, если заголовки получены повышением строк.
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
В Power Query это невозможно
В общем согласен. Но пользователи такие изобретательные :) Вдруг получится все же :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Да не, ну как :):) это же = поля в записи. Единственный вариант - это когда заголовки не повышены и находятся в строке. Но тогда вообще другое решение нужно
F1 творит чудеса
 
Добрый день.
Хотел использовать вариант, который предложил Дмитрий, в своей работе.
Вроде все сделал как надо, но таблица после разворота вывела значение null
Понятно, что сделал что-то не так. Поправьте плз.
Благодарю
 
Зачем все так усложнять?
Код
let
    Source = Excel.CurrentWorkbook(),
    FilteredRows = Table.SelectRows(Source, each ([Name] <> "Tabelle1_2")),
    Custom1 = Table.Combine( FilteredRows[Content] )
in
    Custom1
Вот горшок пустой, он предмет простой...
 
PooHkrd,
спс за ответ.
Я правда совсем не понял как ваш код применим здесь
 
Mirdv, вы в том смысле что вам нужно получить столбец без дубликатов? Или что?
Вот горшок пустой, он предмет простой...
 
Нет, столбец с названиями столбцов без дубликатов я получил
Проблема другая, после разворота 3-х листов столбцы подтянулись, но значения в развернутой таблице для всех этих столбцов стали null
Вопрос в этом, что не так сделано? Или может мне что-то надо было еще доделать, прежде чем разворачивать таблицы?
Изменено: Mirdv - 27.02.2020 11:43:02
 
А на всех ли листах есть значения для этих имен столбцов?
Вы покажите нормально в примере, что есть и что хочется получить в итоге.
Вот горшок пустой, он предмет простой...
 
Я тоже не понял проблемы по приложенному файлу. Можете пошагово пояснить что хотите получить и желательно приложить файлики со структурой для тестов?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
По сути я взял файлы из поста #1
В файле Тест есть 2 таблицы
"зеленая " -то что выдал мне мой запрос
"синяя" - я думал, что результат должен быть таким (пост #3)
что я не так сделал?
Изменено: Mirdv - 27.02.2020 15:05:24
 
Mirdv, на последнем шаге в изначальной таблице в столбце Data надо использовать первую строку таблиц в именах столбцов.
Код
= Table.ExpandTableColumn(Table.TransformColumns(Source, {"Data" , each Table.PromoteHeaders(_)})[[Data]], "Data", union)
 
Михаил Л, благодарю работает
Да виноват, закрутился на работе и забыл, что заголовки нужно в источнике поднять .
Страницы: 1
Наверх