Сравните столбцы из двух разных листов и добавьте сопоставленные данные - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть два источника данных, которые я буду sh объединять.

Источник 1

Источник данных на Листе 1 содержит 2 столбца: AccountID и Cost. Источник находится в ячейках A3: B3 (строка данных начинается в A4). Данные продолжаются от 1 до N строк. Вторичная ячейка содержит значение года для всех записей, которые будут использоваться в этом источнике. Он находится в ячейке D1.

Источник 2

Источник данных на Листе 2 содержит 6 столбцов и находится в диапазоне A1: F1 (данные начинаются со строки 2): Год, AccountID , Местоположение, номер телефона, тип электронной почты и стоимость. Данные продолжаются от 1 до N строк.

I wi sh, чтобы объединить записи обеих таблиц на основе AccountID каждого диапазона данных (столбец Sheet1, столбец B Sheet2), где год (источник) на листе 1! D1) добавляется ко всем записям данных на листе 2, и записи, соответствующие идентификатору учетной записи, содержат включенную информацию при присоединении данных.

Пример # 1

AccountID " 1234 "находится на Листе 1, но не на Листе 2. Значение года (Sheet1! D1) содержит 2020. В конечный результат будет добавлена ​​новая строка с идентификатором AccountID «1234» в Sheet2, связанным значением Cost и годом 2020.

Пример # 2

AccountID "1234" находится на листе 1, а также на листе 2. Запись на Sheet2 имеет значение года 2019. Запись на Sheet1 имеет связанный с ней год 2020 (значение ячейки Sheet1! D1). Конечный результат будет иметь две строки данных для AccountID «1234» на Листе 2, одну для записи 2019 года и одну для записи 2020 года, как указано в источнике данных Sheet1. Последний не будет включать значения Location, Phone # или Email, так как они нигде не указаны.

Изображения

Лист 1:

Sheet 1

Лист 2:

Sheet 2

Лист 2 после заполнения данных из листа1:

Sheet 2 after data is populated from sheet 1

1 Ответ

1 голос
/ 28 апреля 2020

Это можно сделать с помощью Power Query. Следующие запросы предполагают, что вы создали таблицы с вашими данными с именами «Таблица1» на Листе 1 и «Таблица2» на Листе 2. Для этого потребуется 5 отдельных запросов: 2 для таблиц данных, одна функция, таблица слияния и один последний запрос для объединения данных. Для всего этого добавьте новый пустой запрос (вкладка «Данные»> «Получить данные»> «Из других источников»> «Пустой запрос»). Вам также необходимо создать именованный диапазон для ячейки D1 ​​на листе 1 под названием «YearValue».

Функция YearValue

Вставьте приведенный ниже код в расширенный редактор (Power Query). > Вид> Расширенный редактор). Измените имя (справа) на «YearValue».

let
    Source = Excel.CurrentWorkbook(){[Name="YearValue"]}[Content]{0}[Column1]
in
    Source

Закрыть и загрузить только для подключения.

Запрос таблицы 1

Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «Table1».

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    TypeColumns = Table.TransformColumnTypes(Source,{{"AccountID", Int64.Type}, {"Cost", Int64.Type}}),
    AddYearColumn = Table.AddColumn(TypeColumns, "Year", each YearValue)
in
    AddYearColumn

Закрыть и загрузить только для подключения.

Запрос таблицы 2

Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «Table2».

let
    Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    TypeColumns = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"AccountID", Int64.Type}, {"Location", type text}, {"Phone#", type text}, {"Email type", type text}, {"Cost", Int64.Type}})
in
    TypeColumns

Закрыть и загрузить только для подключения.

Запрос таблицы слияния

Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «MergeTable».

let
    Source = Table.FromColumns({List.Distinct(List.Select(Table1[AccountID]&Table2[AccountID],each _ <> null))},type table[AccountID = text]),
    MergeQueries = Table.NestedJoin(Source,{"AccountID"},Table1,{"AccountID"},"Table1",JoinKind.LeftOuter),
    ExpandedTable1 = Table.ExpandTableColumn(MergeQueries, "Table1", {"AccountID", "Cost", "Year"}, {"Table1.AccountID", "Table1.Cost", "Table1.Year"}),
    MergeQueries2 = Table.NestedJoin(ExpandedTable1,{"AccountID"},Table2,{"AccountID"},"Table2",JoinKind.LeftOuter),
    ExpandedTable2 = Table.ExpandTableColumn(MergeQueries2, "Table2", {"Year", "AccountID", "Location", "Phone#", "Email type", "Cost"}, {"Table2.Year", "Table2.AccountID", "Table2.Location", "Table2.Phone#", "Table2.Email type", "Table2.Cost"}),
    RemoveColumns = Table.RemoveColumns(ExpandedTable2,{"AccountID", "Table2.Year", "Table2.AccountID", "Table2.Cost"}),
    ReorderColumns = Table.ReorderColumns(RemoveColumns,{"Table1.Year", "Table1.AccountID", "Table2.Location", "Table2.Phone#", "Table2.Email type", "Table1.Cost"}),
    RenameColumns = Table.RenameColumns(ReorderColumns,{{"Table1.Year", "Year"}, {"Table1.AccountID", "AccountID"}, {"Table2.Location", "Location"}, {"Table2.Phone#", "Phone#"}, {"Table2.Email type", "Email type"}, {"Table1.Cost", "Cost"}})
in
    RenameColumns   

Закрыть и загрузить только для подключения.

Запрос объединить таблицы

Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «CombineTables».

let
    Source = Table.Combine({Table2, MergeTable}),
    FilterRows = Table.SelectRows(Source, each ([Year] <> null)),
    SortRows = Table.Sort(FilterRows,{{"AccountID", Order.Ascending}})
in
    SortRows

Закройте и загрузите рабочий лист (по желанию).

HTH

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