Как сшить / объединить (LEFT OUTER JOIN) несколько таблиц вместе из нескольких файлов Excel, расположенных в папке, с помощью PowerQuery? - PullRequest
1 голос
/ 22 июня 2019

Здравствуйте. Я пытаюсь решить простую проблему, но мне не удалось найти решение ни в Google, ни где-либо еще.У меня есть несколько файлов Excel с таблицами внутри них, которые идентичны.Я запустил PowerQuery для загрузки всех объектов таблиц в свою модель данных, и теперь мне нужен способ объединения всех таблиц на основе общего PrimaryKey.

Все таблицы в файлах идентичны по структуре иимеют одинаковое количество строк, но разные столбцы.Существует только 1 столбец PrimaryID, и он называется одинаковым во всех таблицах.

Мне удалось выяснить, как выполнить объединение файлов по 1 таблице за раз, но мне было интересно, если Power Queryвозможность автоматизировать этот процесс, объединяя все таблицы, расположенные в папке, аналогичным образом.(то есть объединение таблицы 1 --- LEFT JOIN ---> таблица 2 --LEFT JOIN -> таблица 3)

1 Ответ

0 голосов
/ 23 июня 2019

Допустим, у меня есть несколько файлов в одной папке.Я могу загрузить из этой папки свое подключение к данным, и оно должно выглядеть следующим образом:

Load from folder

Теперь я добавлю пользовательский столбец, который читает двоичный файлфайл в каждой строке и возвращает таблицу.Мои файлы отформатированы как CSV, поэтому я написал бы следующее:

= Table.AddColumn(Source, "Custom", each Table.PromoteHeaders(Csv.Document([Content])))

Я удалю все остальные столбцы, кроме этого нового, а затем использую Table.Combine, чтобы превратить этот столбец в объединенную таблицу:

= Table.Combine(#"Removed Other Columns"[Custom])

Combine tables

Здесь первые четыре строки от FileA, а последние четыре от FileBV.

Это не совсем то, что я хочу, но я могу удалить эти null значения, отвинтив столбцы без идентификатора, а затем снова повернувшись, чтобы вернуться к нужной форме.(Вероятно, есть лучший способ, о котором я не думаю.)

Не развернутый:

Unpivotted

Поворот:

Pivotted


M Код:

let
    Source = Folder.Files("C:\Users\Computer\test"),
    BinToTable = Table.AddColumn(Source, "Custom", each Table.PromoteHeaders(Csv.Document([Content]))),
    #"Removed Other Columns" = Table.SelectColumns(BinToTable,{"Custom"}),
    #"Added Custom" = Table.Combine(#"Removed Other Columns"[Custom]),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Added Custom", {"ID"}, "Attribute", "Value"),
    #"Pivoted Column" = Table.Pivot(#"Unpivoted Columns", List.Distinct(#"Unpivoted Columns"[Attribute]), "Attribute", "Value")
in
    #"Pivoted Column"

Это не супер-элегантно, но оно должно быть довольно надежным, так как мы никогда не используем имена или числастолбцов в базовых файлах за исключением ID.

...