6 видов Table.NestedJoin в Power Query: Объединяем таблицы в Excel и Power BI

6 видов Table.NestedJoin в Power Query: Объединяем таблицы в Excel и Power BI

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

Power Query предлагает на выбор шесть различных способов объединения таблиц:

  1. Внешнее соединение слева (все из первой таблицы, совпадающие из второй)
  2. Внешнее соединение справа (все из второй таблицы, совпадающие из первой)
  3. Полное внешнее (все строки из обеих таблиц)
  4. Внутреннее (только совпадающие строки)
  5. Анти-соединение слева (только строки в первой таблице)
  6. Анти-соединение справа (только строки во второй таблице)

Для разных целей вам понадобятся разные виды соединений. Несмотря на то, что способы 1 и 2, а также 5 и 6 - зеркальны, мы разберём каждый из них. 

Внешнее соединение слева (Left Outer Join)

Из правой таблицы «перетаскиваем» данные в левую (в Excel это делают обычно с помощью ВПР). К данным из первой таблицы добавляются все значения из второй таблицы, соответствующие столбцу поиска. Если во второй таблице нет искомых значений, вы получите значение null (null – это значит пусто).

Пример: объединим продажи товаров с ценами.

Шаг 1. Добавим таблицы в Power Query

Выбираем: вкладка ДанныеПолучить данныеИз других источниковИз таблицы / диапазона.  Для новых версий Excel: вкладка Данные → Из таблицы / диапазона. 

Шаг 2. Создадим подключения

После загрузки вернемся обратно в Excel из Power Query командой "Закрыть и загрузить - Закрыть и загрузить в...". В появившемся затем окне выбираем "Только создать подключение".                          

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

Шаг 3. Объединим таблицы

Создадим третий запрос, который будет объединять и сравнивать данные из предыдущих двух запросов. 

Для этого выберем в Excel на вкладке Данные - Получить данные - Объединить запросы - Объединить или нажмем кнопку Объединить на вкладке Power Query.

В окне объединения выберем в выпадающих списках наши таблицы, выделим в них столбцы с названиями товаров и в нижней части зададим тип соединения «Внешнее соединение слева»:

Далее появится таблица из трех столбцов. Третий столбец содержит таблицы цен по каждому товару - эти таблицы нужно развернуть с помощью двойной стрелки в шапке:

Оставляем галочки для нужных столбцов и нажимаем ОК. Можно не использовать имя столбца как префикс - это только загружает заголовки.

В итоге получим слияние данных из обеих таблиц. На некоторые товары цены еще не установлены, поэтому в столбце «цена» для этих товаров будет значение null:

Осталось выгрузить получившийся отчет на лист Excel с помощью кнопки "Закрыть и загрузить" на вкладке Главная. Объединение выполнено успешно!

Этот тип Join довольно удобен если у вас есть таблица статистики, в которую нужно подтянуть дополнительные столбцы.

Внешнее соединение справа (Right Outer Join)

Вторая таблица используется как источник данных и управляет содержимым первой таблицы. Из второй таблицы будут добавлены те значения, которых нет в первой. Из первой таблицы исчезнут все ненайденные во второй таблице данные. 

"Внешнее соединение справа" работает так же, как и "Внешнее соединение слева" – отличается только порядок расположения таблиц. В связи с этим оно редко используется на практике.

Пример: объединим таблицу ставок по оплатам и таблицу с переработками.

Объединим таблицы, чтобы рассчитать будущие выплаты сотрудникам. Общий столбец для поиска — «сотрудники».

В результате объединения у нас «исчезли» данные по сотрудникам, у которых нет переработок. В объединенную таблицу попали только сотрудники из второй таблицы.

Полное внешнее соединение (Full Outer Join)

В этом случае будут объединены все строки из первой и второй таблиц. Это самый безопасный способ соединения двух таблиц - вы не теряете данные. Такой способ часто помогает сравнить данные двух таблиц и найти расхождения.

Пример: объединим таблицы по объему производства и количеству брака.

В данном примере попробуем объединить таблицы по нескольким столбцам. Для создания общей таблицы используется "Полное внешнее соединение". Для объединения используем общие столбцы «Дата» и «Подразделение» - выбираем их в нужном порядке в каждой таблице, зажимая клавишу ctrl:

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

Приводим к нужному виду нашу объединенную таблицу:

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

Внутреннее соединение (Inner Join)

При таком типе соединения в общей таблице остаются только совпадающие строки из обеих таблиц. Если вас интересуют только пересечения таблиц, Inner Join - самый подходящий способ.

Пример: получить список только тех сотрудников, которые выполнили успешно оба теста.

Для решения этой задачи также объединим таблицы по нескольким столбцам. Для создания общей таблицы используется тип соединения "Внутреннее (только совпадающие строки)".

Получим список сотрудников, участвующих в обоих тестах:

После фильтрации и удаления лишних столбцов приводим объединенную таблицу к нужному виду:

Анти-соединение слева (Left Anti Join)

При Left Anti Join подтянутся все данные из левой таблицы, которых нет в правой таблице. Можно сказать, анти-ВПР.

Если надо вычесть одну таблицу из другой - вам подойдёт именно Left Anti Join.

Пример: в первой таблице – список клиентов и количество звонков, во второй – данные о сделках. Нужно найти клиентов, которым звонили, но они ничего не купили.

Исключаем из первой таблицы всех клиентов второй таблицы. Для создания общей таблицы используется "Анти-соединение слева":

После удаления лишнего столбца получаем готовую таблицу клиентов, которые ничего не купили:

Анти-соединение справа (Right Anti Join)

С помощью Right Anti Join из второй таблицы будут исключены все строки, найденные в первой таблице. По сути это зеркальное отражение Left Anti Join, поэтому используется редко. 

Пример: в первой таблице - участники акций, во второй – клиенты и суммы оплат. Следует найти клиентов, которые совершили сделки, но не участвовали в акциях.

Нужно исключить из второй таблицы всех найденных клиентов в первой  таблице. Для создания общей таблицы используется "Анти-соединение справа".

Power Query на этапе слияния всегда делает нам подсказку: "Выделенный фрагмент исключает строки из второй таблицы (4 из 6)". В результате получаем запрос такого вида:

Разворачиваем содержимое вложенных таблиц с помощью двойной стрелки в шапке и удаляем два первых столбца. Получаем готовый отчет о клиентах, не участвующих в акции:

Заключение

Мы рассмотрели 6 базовых соединений таблиц в Power Query. 4 из них довольно часто применяются на практике, а 2 - являются зеркальными и используются редко.

Для подтягивания дополнительных данных к таблицам статистики рекомендуем использовать Left Join. Если вы хотите сравнить несколько таблиц между собой, вам пригодится Full Outer Join. Когда нужно найти пересечения таблиц - пользуйтесь Inner Join. Ну а для вычитания одной таблицы из другой всегда можно задействовать Left Anti Join. 

"Right Join" и "Right Anti Join" на практике обычно не используются, так как являются зеркальным отражением "Left Join" и "Left Anti Join". Но на всякий случай мы включили их в описание, чтобы вы увидели как их использовать.

Комментарии