
Описание
В этом уроке мы разберем основные виды объединения таблиц по горизонтали в Power Query. Вы узнаете, что такое левое, полное, внутреннее и кросс объединения таблиц по горизонтали.
Решение
Внутреннее объединение в Power Query
При внутреннем объединении в результирующей таблице останутся только совпадающие строки. В наших двух таблицах есть только два id, которые присутствуют в обеих таблицах. При внутреннем объединении в итоговой таблице именно эти два id и останутся.

Левое объединение в Power Query
При левом объединении мы всегда получим все строки, которые есть в левой таблице. Из правой таблицы мы получим только совпадающие строки. В итоговой таблице мы получили две строки, заполненные полностью — это именно те строки, что мы получили при внутреннем объединении. Помимо этих двух строк в итоговой таблице присутствуют остальные строки из левой таблицы. В правой части итоговой таблицы для несовпадающих строк все ячейки заполнены значениями null.

Полное объединение в Power Query
При полном объединении мы в итоговой таблице получим все строки из обеих таблиц. В нашем примере при полном объединении мы получим все строки, что получили бы при левом объединении плюс все строки из правой таблицы, для которых не нашлось совпадений в левой. Левая часть таблицы для таких строк тоже будет заполнена значениями null.

Кросс объединение в Power Query
При кросс объединении каждая строка первой таблицы будет объединена со всем строками второй таблицы. При этом никаких совпадений даже не ищется.

Дублирование строк при объединении в Power Query
Поле, по которому мы объединяем таблицы будет объединено с каждой совпадающей строкой.

Примененные функции
- Excel.CurrentWorkbook
- Table.TransformColumnTypes
- Table.NestedJoin
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.FullOuter
- Table.ExpandTableColumn
- Table.AddColumn
Код
Код внутреннего соединения:
let
inner_joined = Table.NestedJoin(
Премьер,
{"country"},
Президент,
{"country"},
"presidents",
JoinKind.Inner
),
expanded = Table.ExpandTableColumn(
inner_joined,
"presidents",
{"president"},
{"president"}
)
in
expanded
Код левого соединения:
let
left_joined = Table.NestedJoin(
Президент,
{"country"},
Премьер,
{"country"},
"Премьер",
JoinKind.LeftOuter
),
expanded = Table.ExpandTableColumn(
left_joined,
"Премьер",
{"prime_minister"},
{"prime_minister"}
)
in
expanded
Код полного соединения:
let
inner_joined = Table.NestedJoin(
Президент,
{"country"},
Премьер,
{"country"},
"Премьер",
JoinKind.FullOuter
),
expanded = Table.ExpandTableColumn(
inner_joined,
"Премьер",
{"country", "continent", "prime_minister"},
{"country.1", "continent.1", "prime_minister"}
)
in
expanded
Код кросс-соединения:
let
source = Ранг,
cross_joined = Table.AddColumn(source, "Таблица", each Масть),
expanded = Table.ExpandTableColumn(
cross_joined,
"Таблица",
{"Масть"},
{"Масть"}
)
in
expanded