Power Query объединяет три внешних исходных файла Excel и добавляет указанные столбцы c - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь создать справочную таблицу, объединяющую три столбца первичных ключей моих исходных файлов, поэтому мне не нужно будет выполнять внешнее объединение, чтобы найти недостающие записи из каждого источника и затем добавить их вместе. Я нашел, как «объединить» два исходных файла, но я не могу понять, как развернуть список столбцов / полей, чтобы я мог выбрать только столбец 1 (или имя заголовка «Код элемента» в файлах Excel).

Вот код, который у меня есть для объединения 2/3 файлов (в качестве пробного):

let
Source = Table.Combine({Excel.Workbook(File.Contents("C:\Users\Desktop\Dry Good Demad-Supply Report\MRP_ParentDmd\Data_Sources\JDE_MRP_Dmd.xlsx"), null, true), 

Excel.Workbook(File.Contents("C:\Users\Desktop\Dry Good Demad-Supply Report\MRP_ParentDmd\Data_Sources\JDE_Open_PO.xlsx"), null, true)})

in Source

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

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

Приведенный ниже код М должен быть грубым началом, которое, как мы надеемся, поможет вам на пути

let
    //Adjust the Source step to refer to the relevant folder your 3 source files are saved in
    Source = Folder.Files("CC:\Users\Desktop\Dry Good Demad-Supply Report\MRP_ParentDmd\Data_Sources"),

    //Filter the file list to leave just your 3 source files if required
    #"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".xlsx")),

    //Remove all columns excep the Binary file column
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Content"}),

    //Convert the binary file to the file data ie sheets, tables, named ranges etc - the same data you get when you use a file as a source
    #"Workbook Data" = Table.TransformColumns(#"Removed Other Columns",{"Content", each Excel.Workbook(_)}), 

    //Filter the nested file data table cell to select the sheet you need from your source files - may not be necessary depending on what's in the files
    #"Sheet Filter" = Table.TransformColumns(#"Workbook Data",{"Content", each Table.SelectRows(_, each [Name] = "Sheet1")}),     

    //Step to Name the column you want to extract data from
    #"Column Name" = "Column1",

    //Extract a List of the values in the specified column
    #"Column Values" = Table.TransformColumns(#"Sheet Filter",{"Content", each List.Distinct(Table.Column(_{0}[Data],#"Column Name"))}), 

    //Expand all the lists
    #"Expanded Content" = Table.ExpandListColumn(#"Column Values", "Content"),

    #"Removed Duplicates" = Table.Distinct(#"Expanded Content")
in
    #"Removed Duplicates"

РЕДАКТИРОВАТЬ Чтобы выбрать несколько столбцов и предоставить отдельные строки, вы можете изменить шаги, начиная с #"Column Name"

Это может в конечном итоге занять немного больше, чем предыдущий шаг, в зависимости от того, сколько у вас есть данные, но они должны выполнять работу

    //Step to Name the column you want to extract data from
    #"Column Name" = {"Column1","Column2","Column5"},

    //Extract a List of the values in the specified column
    #"Column Values" = Table.TransformColumns(#"Sheet Filter",{"Content", each Table.SelectColumns(_{0}[Data],#"Column Name")}),

    //In each nested table, filter down to distinct rows
    #"Distinct rows in Nested Tables" = Table.TransformColumns(#"Column Values",{"Content", each Table.Distinct(_)}),

    //Expand nested table column
    #"Expanded Content" = Table.ExpandTableColumn(#"Distinct rows in Nested Tables", "Content", #"Column Name"), 

    //Remove Duplicates in combined table
    #"Removed Duplicates" = Table.Distinct(#"Expanded Content")
in
    #"Removed Duplicates"
0 голосов
/ 11 апреля 2020

Если вы начинаете с Power Query, не пытайтесь писать свой код вручную и не объединяйте все в один оператор. Вместо этого используйте команды ленты, а затем измените код, если требуется.

Для вашего сценария вы можете создать отдельный запрос для каждого источника данных. Загрузите их только как соединения. Сформируйте каждый источник данных так, чтобы он содержал нужные вам столбцы. Затем вы можете добавить три запроса данных и дополнительно уточнить результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...