Слияние таблиц в excel в одну таблицу power query

Вы работали со сводными таблицами Excel? Если нет – нужно срочно начинать. Это супер-инструмент, который позволяет быстро и просто обрабатывать большие объемы данных. А если вы с ними все-таки работали, то я как экстрасенс-капитан-очевидность могу точно сказать, что вы сталкивались с ситуацией, когда нужно построить сводную таблицу на основе нескольких источников данных. Например, с помощью нескольких одинаковых таблиц Excel, копируя их одну под другой. Или дополняя свою таблицу новыми столбцами и аналитиками.

Добавление или объединение таблиц?

Чаще всего, чтобы объединить данные в Excel, пользователи копируют таблицы одну под другую. Или пишут формулы по типу ВПР, если в таблицу нужно добавить новые столбцы или аналитики. Но вы наверняка знаете, что самый удобный инструмент для объединения данных в Excel – это Power Query. Там есть два принципиальных способа:

  1. По вертикали – добавление таблицы под таблицу. Полезно, когда таблицы с одинаковой шапкой находятся в разных файлах или на разных листах.
  2. По горизонтали – слияние таблиц, похожее на ВПР. А здесь есть еще варианты — не только аналогичные ВПР, но и ВПР-наоборот, и ВПР-неВПР… Целых шесть видов объединения таблиц.

Разберем, чем эти способы отличаются друг от друга.

Вариант 1. Добавление таблицы под таблицу

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

Как на основе таблиц с одинаковой шапкой построить единую базу? Добавив таблицы одну под другую

Раньше процедуру добавления строк из одной таблицы в другую можно было выполнить с помощью копирования. Отсюда много ручной работы при внесении новых данных (ну, или писали макросы). Однако с момента появления в Excel надстройки Power Query у нас появилась возможность добавлять таблицы одну под другую несколькими щелчками мыши. Как это сделать – смотрите в видео.

Вариант 2. Объединение таблиц

Объединение таблиц применяется, когда у вас есть две таблицы (шапки у них скорее всего разные), и одна таблица дополняет другую. Например, в отчете продажи показаны по городам, а у вас просят вывести информацию по областям. Тогда потребуется объединение по горизонтали:

Одна таблица дополняет другую с помощью объединения по общему столбцу

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

Типы объединения данных в Power Query

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

  • Внешнее соединение слева (все из первой таблицы, совпадающие из второй)
  • Внешнее соединение справа (все из второй таблицы, совпадающие из первой)
  • Полное внешнее (все строки из обеих таблиц)
  • Внутреннее (только совпадающие строки)
  • Анти-соединение слева (только строки в первой таблице)
  • Анти-соединение справа (только строки во второй таблице)

Left Outer Join

Inner Join

Right Outer Join

Внешнее соединение справа

Left Anti Join

Full Outer Join

Right Anti Join

Разберем в способы объединения данных на примерах.

Внешнее соединение слева

Left Outer Join

Внешнее соединение слева наиболее часто применяется для объединения таблиц. Это то, что мы делаем в Excel с помощью формулы ВПР  – из одной таблицы «перетаскиваем» данные в другую.

объединение в power query

Когда вы выбираете «Внешнее соединение слева», к данным из первой таблицы добавляются все значения из второй таблицы, соответствующие столбцу поиска. Если во второй таблице нет искомых значений, вы получите null или «пусто».

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

Внешнее соединение слева

Добавьте таблицы в Power Query: вкладка Данные → Получить данные → Из других источников → Из таблицы / диапазона, или для новых версий Excel: вкладка Данные → Из таблицы / диапазона. Объедините запросы: вкладка Главная → Объединить запросы, выберите столбец слияния «Товар» и тип объединения «Внешнее соединение слева». На некоторые товары нет плановых цен, поэтому после объединения в столбце «цена» для этих товаров будет проставлен null.

Соединение Power Query

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

Внешнее соединение справа

Right Outer Join

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

power query объединение таблиц

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

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

Внешнее соединение справа

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

Соединение Power Query

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

Полное внешнее соединение

Full Outer Join

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

power query полное объединение

Пример: в первой таблице приведен объем производства по дням, во второй – объем брака. Создадим общую таблицу.

Полное внешнее соединение

Для создания общей таблицы используется Полное внешнее соединение. Для объединения используем общий столбец «дата». В результате получится отчет с датами и цифрами из первой и второй таблицы. В ячейках, где данные за аналогичные периоды были только в первой или только во второй таблице, стоит null.

Полное внешнее соединение

Внутреннее соединение

Inner Join

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

power query объединение

Таблицы объединяются с помощью общего столбца. При этом из первой таблицы исчезнут все не найденные в «общем» столбце второй таблицы строки. Из второй таблицы – исчезнут не найденные в первой.

Пример: есть два списка покупателей, принявших участие в акциях А и Б – по одному для каждой из акций. С помощью Внутреннего соединения получим список покупателей, участвовавших и в той, и в другой акции.

Внутреннее соединение

Поиск выполняется по общему столбцу «Покупатель». Результат — список покупателей, участвовавших в обеих акциях.

Внутреннее соединение

Анти-соединение слева

Left Anti Join

Если вам требуется исключить из таблицы ненужные строки, можно воспользоваться объединением с Анти-соединением слева. С помощью этого способа из первой таблицы будут исключены все строки, найденные во второй.

power query объединение

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

Анти-соединение слева

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

Анти-соединение слева

Анти-соединение справа

Right Anti Join

Анти-соединение справа работает так же, как и Анти-соединение слева. Разница здесь только в порядке расположения таблиц.

power query объединение

Пример: в первой таблице – отчет о выполненных задачах, во второй – список поставленных задач. Объединив таблицы с помощью Анти-соединения справа, найдем невыполненные задачи.

Анти-соединение справа

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

Анти-соединение справа

Кроме объединения таблиц с помощью запросов Power Query, такие операции можно выполнять и с помощью DAX-формул, применяя их в различных сочетаниях: GENERATEALL, NATURALLEFTOUTERJOIN, NATURALINNERJOIN, CROSSJOIN, FILTER+CROSSJOIN, GENERATE, EXCEPT и др.

По своим наблюдениям, я замечал, что многие мои коллеги — при объединении 2-х и более таблиц в Excel используют методы ручного копирования данных, при соединении таблиц по одинаковым столбцам данных используют функцию ВПР. Это, конечно удобно, когда речь идет о небольших объемах данных. Но, что делать, если Вам необходимо обработать большие массивы данных из разных источников и из большого количества таблиц? В данном случае, Вам подойдет инструмент Power Query.

Как быстро можно объединить 2 и более таблицы в одну путем добавления данных:

1.В программе Excel импортируем данные из 2-х или более источников, например из книги *xlsx.

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

3. Объединяем запросы через вкладку: Данные – создать запрос – объединить запросы – Добавить.

Таким образом данные из нескольких таблиц соединяются в одну таблицу буквально за несколько кликов мыши.

С использованием Power Query также можно объединять таблицы в одну через одинаковые столбцы данных, используя путь: Данные – создать запрос – объединить запросы – Объединить. Это аналог инструмента ВПР, но наиболее быстрый, удобный и эффективный.

Сборка данных со всех листов книги в одну таблицу

Постановка задачи

Допустим, что у нас есть книга с большим количеством листов, где на каждом листе находится таблица с данными по сделкам в этом городе:

Исходный файл

Давайте будем исходить из следующих соображений:

  • Структура и столбцов на всех листах одинаковая.
  • Количество строк на всех листах разное.
  • Листы могут в будущем добавляться или удаляться.

Наша задача — собрать все данные со всех листов в одну таблицу, чтобы потом с ней работать (фильтровать, сортировать, построить сводную и т.д.) Сделать это можно разными способами, но самыми удобными будут, пожалуй, Power Query и макросы.

Способ 1. Сборка данных с листов с помощью Power Query

Если вы ещё не сталкивались в своей работе с Power Query, то очень советую копнуть в этом направлении. Использование этой бесплатной и уже встроенной по умолчанию в Excel надстройки, способно полностью перевернуть весь ваш процесс сбора и анализа данных, упростив всё в разы. С задачей сбора данных с листов Power Query справляется весьма успешно.

Шаг 1. Подключаемся к файлу

Для начала, создадим новый пустой файл в Excel, куда и будут собираться данные.

Если у вас Excel 2010-2013 и вы установили Power Query как отдельную надстройку, то откройте вкладку Power Query, если у вас Excel 2016 или новее, то вкладку Данные (Data). Нажмите кнопку Получить данные / Создать запрос — Из файла — Книга Excel (Get Data / New Query — From file — From Excel) и укажите наш файл с исходными листами:

Указываем файл

В появившемся окне Навигатора (Navigator) выберите слева любой лист и нажмите в правом нижнем углу кнопку Преобразовать данные (Transform Data) или Изменить (Edit):

Выбираем любой лист

Должно появиться окно редактора запросов Power Query, где отобразятся данные с выбранного листа. Поскольку нам нужен, на самом деле, не один лист, а все, то удалим в правой панели все шаги, кроме первого шага Источник (Source) используя крестик слева от названия шага:

Удаляем лишние шаги

То, что останется после удаления шагов — это список всех объектов, которые Power Query «видит» во внешних файлах, а это:

  • листы (Sheet)
  • «умные таблицы» (Table)
  • именованные диапазоны (Defined Name)
  • области печати (Print Area), которые, по сути, являются одним из видов именованного диапазона

Шаг 2. Отбираем нужные листы

В исходном файле может быть много всего лишнего, что нам не требуется собирать: случайные ненужные листы, служебные именованные диапазоны, побочные умные таблицы и т.п. Очень важно отфильтровать этот «информационный мусор», т.к. в будущем из-за любого подобного объекта наш запорс будет, скорее всего, вылетать с ошибкой или некорректно собирать данные. Для решения этой задачи можно использовать несколько подходов.

Во-первых, легко можно отфильтровать нужные объекты по типу по столбцу Kind. Например, если вам нужны только листы:

Фильтруем листы

Во-вторых, если нам нужны только видимые листы, то дополнительно можно отфильтровать ещё по столбцу Hidden.

В-третьих, если вы точно знаете размер таблиц, которые вам нужны, то можно легко добавить к нашему списку вычисляемый столбец с формулой, выводящей количество столбцов или строк и использовать потом эти числа для отбора. Для этого выберем на вкладке Добавление столбца — Настраиваемый столбец (Add Column — Custom Column) и введём в открывшееся окно следующую формулу (с учётом регистра):

Подсчет числа столбцов

Для подсчёта количества строк можно использовать аналогичную функцию Table.RowCount. Получившийся столбец затем можно использовать для фильтрации «мусорных» таблиц.

В-четвёртых, можно извлечь с каждого листа содержимое любой ячейки (например, А1) и использовать его для отбора. Например, если там нет слова «Товар«, то это не наш лист. Для извлечения нужно будет также добавить вычисляемый столбец с такой конструкцией:

=[Data][Column1]{0}

Здесь:

  • [Data] — имя столбца, где в каждой ячейке лежат таблицы с содержимым каждого листа (убийственная формулировка для рядового пользователя Excel, да, я знаю)
  • [Column1] — имя столбца на листе, из которого мы хотим извлечь данные
  • {0} — номер строки (считая с нуля), откуда мы хотим взять данные

Извлекаем содержимое А1 с каждого листа

После фильтрации «мусора» все добавленные вспомогательные столбцы можно, конечно же, спокойно удалить, оставив только колонки Name и Data.

Шаг 3. Разворачиваем таблицы

Теперь развернём содержимое таблиц в одно целое, используя кнопку с двойными стрелками в заголовке столбца Data, отключив флажок Использовать исходное имя столбца как префикс (Use original column name as prefix):

Разворачиваем вложенные таблицы

После нажатия на ОК Power Query соберёт для нас все данные в одну мегатаблицу со всех отобранных листов нашего файла:

Собранные данные

Останется лишь «навести блеск», а именно:

  1. Поднять первую строку в шапку таблицы кнопкой Использовать первую строку в качестве заголовков (Use first row as headers) на вкладке Главная (Home).
  2. Переименовать первый столбец в Город двойным щелчком на заголовку.
  3. Удалить повторяющиеся шапки таблиц, попавшие в одну кучу вместе с данными, используя фильтр по столбцу Товар.

Всё. Осталось только дать нашему запросу подходящее имя (например, Сборка) в панели справа и выгрузить затем собранные данные обратно в Excel кнопкой Закрыть и загрузить на вкладке Главная (Home — Close & Load):

Собранные данные

В будущем, при любых изменениях в исходном файле достаточно будет лишь обновить наш запрос, щелкнув по собранной таблице правой кнопкой мыши и выбрав команду Обновить (Refresh) или такой же кнопкой на вкладке Данные (Data) или сочетанием клавиш Ctrl+Alt+F5.

Плюсы такого подхода:

  • Не нужно уметь программировать, всё делается быстро и почти без использования клавиатуры.
  • Последовательность столбцов на разных листах может быть различной — это не играет роли, столбцы правильно встанут друг под друга в итоговой сборке.
  • Можно быстро обновлять запрос при изменении исходных данных.

Минусы этого способа:

  • Собираются только значения, т.е. формулы с исходных листов не сохраняются.
  • Названия столбцов должны на всех листах совпадать с точностью до регистра.
  • Нельзя выбрать какой именно диапазон берётся с каждого листа — это определяется автоматически (берётся всё, что есть).
  • Для обновления нужен Excel 2016 или новее или установленная надстройка Power Query.

Способ 2. Сборка данных с листов макросом на VBA

Похожего результата можно добиться и с помощью более «классического» подохода — макросом на VBA. Для этого на вкладке Разработчик (Developer) нажмите кнпоку Visual Basic или воспользуйтесь сочетанием клавиш Alt+F11. В открывшемся окне добавьте новый модуль через меню Insert — Module и скопируйте туда текст вот такого макроса:

Sub CollectDataFromAllSheets()
    Dim ws As Worksheet
    
    Set wbCurrent = ActiveWorkbook
    Workbooks.Add
    Set wbReport = ActiveWorkbook
    
    'копируем на итоговый лист шапку таблицы из первого листа
    wbCurrent.Worksheets(1).Range("A1:D1").Copy Destination:=wbReport.Worksheets(1).Range("A1")
    
    'проходим в цикле по всем листам исходного файла
    For Each ws In wbCurrent.Worksheets
    
        'определяем номер последней строки на текущем листе и на листе сборки
        n = wbReport.Worksheets(1).Range("A1").CurrentRegion.Rows.Count
        
        'задаем исходный диапазон, который надо скопировать с каждого листа - любой вариант на выбор:
        Set rngData = ws.Range("A1:D5")            'фиксированный диапазон или
        Set rngData = ws.UsedRange                 'всё, что есть на листе или
        Set rngData = ws.Range("F5").CurrentRegion    'область, начиная от ячейки F5 или
        Set rngData = ws.Range("A2", ws.Range("A2").SpecialCells(xlCellTypeLastCell))    'от А2 и до конца листа
        
        'копируем исходный диапазон и вставляем в итоговую книгу со следующей строки
        rngData.Copy Destination:=wbReport.Worksheets(1).Cells(n + 1, 1)
        
    Next ws
End Sub

Запустить созданный макрос можно на вкладке Разработчик кнопкой Макросы (Developer — Macros) или с помощью сочетания клавиш Alt+F8. Макрос автоматически создаст новую книгу и скопирует туда нужные вам данные.

Плюсы такого подхода:

  • Формулы с исходных листов сохраняются в сборке.
  • Имена столбцов не играют роли.
  • Макрос будет работать в любой версии Excel.
  • Можно выбирать, что именно брать с каждого листа (конкретный фиксированный диапазон или весь лист).

Минусы этого способа:

  • Последовательность столбцов на всех листах должна быть одинаковой, т.к. происходит, по сути, тупое копирование таблиц друг-под-друга.
  • Защита от макросов должна быть отключена.
  • Быстрого обновления, как это было с Power Query, здесь, к сожалению, не будет. При изменении исходных данных придётся запустить макрос повторно.

Способ 3. Готовый макрос из надстройки PLEX

Если лень возиться с макросами или Power Query, то можно пойти по пути наименьшего сопротивления — использовать готовый макрос (кнопка Собрать) из моей надстройки PLEX для Excel. Это, может, и не спортивно, но зато эффективно:

Сборка данных с листов через PLEX

В общем, выбирайте любой удобный вам вариант и действуйте. Выбор — это всегда хорошо.

Ссылки по теме

  • Что такое Power Query и с чем его едят.
  • Как создавать свои макросы, использовать чужие и запускать их в своих файлах.
  • Сборка данных из нескольких файлов с помощью Power Query.

Самый удобный инструмент для объединения таблиц – надстройка 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». Но на всякий случай мы включили их в описание, чтобы вы увидели как их использовать.

Файлы к уроку:

  • Для спонсоров Boosty
  • Для спонсоров VK

Ссылки:

  • Страница курса
  • Плейлист YouTube
  • Плейлист ВК

Описание

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

В данном примере мы разберем объединение таблиц в Power Query. Это аналог операции LEFT JOIN из SQL. Для пользователей Excel данная операция тоже покажется знакомой. Больше всего она похожа на использование функции ВПР. Разница в том, что при использовании ВПР мы присоединяем данные только из одного столбца другой таблицы. Если же мы выполняем операцию объединения таблиц в Power Query, то объединяем таблицы полностью.

ВПР мы используем, когда хотим добавить значения из одной таблицы в другую. Как правило, мы добавляем данные из таблицы-справочника в таблицу-факт.

В таблице факта, например, может находиться детальная информация по продажам, а в таблице справочнике может находиться подробная информация о точке продаж: адрес, директор, тип точки и т. д.

Решение

В данном примере у нас есть 1 файла-источника. В первом находится детальная информация о продажах, а во втором справочная информация по торговым точкам. Нам нужно получить одну большую таблицу, т. е. к информации по продажам приклеить информацию по торговым точкам.

Чтобы объединить 2 таблицы сделаем следующее:

  1. Подключимся к обеим таблицам
  2. На вкладке Главная выберем команду Объединения
  3. Укажем общий столбец

При объединении важно обратить внимание на то, чтобы общий столбец был с одним типом данных.

Примененные функции

  • Csv.Document
  • Table.PromoteHeaders
  • Table.SelectColumns
  • Table.TransformColumnTypes
  • Excel.Workbook
  • Table.NestedJoin
  • JoinKind.LeftOuter
  • Table.ExpandTableColumn

Код

Код для подключения к первой таблице:

let
   source = Csv.Document(
      File.Contents(Путь & "И_ТЭКО.csv"),
      [Delimiter = ";", Columns = 16, Encoding = 65001, QuoteStyle = QuoteStyle.None]
   ),
   promote_headers = Table.PromoteHeaders(source, [PromoteAllScalars = true]),
   rows_select = Table.SelectColumns(
      promote_headers,
      {
         "Время",
         "Id инициатора",
         "Сумма в валюте получения",
         "Валюта получения",
         "Сумма в валюте внесения с комиссией",
         "Валюта внесения",
         "RUB (инициатор)"
      }
   ),
   types = Table.TransformColumnTypes(
      rows_select,
      {
         {"Время", type datetime},
         {"Сумма в валюте получения", type number},
         {"Сумма в валюте внесения с комиссией", type number},
         {"RUB (инициатор)", type number}
      }
   )
in
   types

Код для подключения ко второй таблице:

let
   source = Excel.Workbook(File.Contents(Путь & "И_СпрТочки.xlsx"), null, true),
   get_table = source{[Item = "Таблица1", Kind = "Table"]}[Data],
   types = Table.TransformColumnTypes(
      get_table,
      {
         {"ID POS", Int64.Type},
         {"Канал продаж", type text},
         {"ТМ", type text},
         {"Краткий адрес", type text},
         {"ID 2", type text}
      }
   )
in
   types

Код для объединения этих двух таблиц по горизонтали:

let
   source = Table.NestedJoin(
      table_1,
      {"Id инициатора"},
      table_2,
      {"ID 2"},
      "И_Точки",
      JoinKind.LeftOuter
   ),
   col_expand = Table.ExpandTableColumn(
      source,
      "И_Точки",
      {"ID POS", "Канал продаж", "ТМ", "Краткий адрес"},
      {"ID POS", "Канал продаж", "ТМ", "Краткий адрес"}
   )
in
   col_expand

Этот урок входит в Базовый курс Power Query

Номер урока Урок Описание
1 Зачем нужен Power Query. Обзор возможностей Этот урок сам по себе является мини-курсом. Здесь вы узнаете для каких видов операций с данными создан Power Query.
2 Подключение Excel Подключаемся к файлам Excel. Импортируем данные из таблиц, именных диапазонов, динамических именных диапазонов.
3 Подключение CSV/TXT, таблиц, диапазонов Подключаемся к к файлам CSV/TXT, Excel.
4 Объединить таблицы по вертикали Учимся объединять две таблицы по вертикали — combine.
5 Объединить по вертикали все таблицы одной книги друг за другом Как объединить по вертикали все таблицы одной книги, находящиеся на разных листах Excel.
6 Объединить по вертикали все файлы в папке Объединяем по вертикали таблицы, которые находятся в разных файлах в одной папке.
7 Объединение таблиц по горизонтали Учимся объединять таблицы по горизонтали — JOIN, merge.
8 Объединить таблицы с агрегированием Объединить таблицы по горизонтали и сразу выполнить группировку с агрегированием — JOIN + GROUP BY.
9 Анпивот (Unpivot) Изучаем операцию Анпивот — из сводной таблицы делаем таблицу с данными.
10 Многоуровневый анпивот (Анпивот с подкатегориями) Более сложный вариант Анпивота — в строках находится несколько измерений.
11 Скученные данные Данные собраны в одном столбце, нужно правильно его разбить на несколько.
12 Скученные данные 2 Разбираем еще один пример скученных данных.
13 Ссылка на другую строку Как сослаться на другую строку.
14 Ссылка на другую строку 2 Как сослаться на другую строку, используя объединение по горизонтали.
15 Виды объединения таблиц по горизонтали Изучаем виды объединения таблиц по горизонтали — LEFT JOIN, FULL JOIN, INNER JOIN, CROSS JOIN.
16 Виды объединения таблиц по горизонтали 2 Изучаем анти-соединение и соединение таблицы с ней же самой — ANTI JOIN, SELF JOIN.
17 Группировка Изучаем операцию группировки с агрегированием — GROUP BY.
18 Консолидация множества таблиц пользовательской функцией Объединяем по вертикали множество таблиц с предварительной обработкой при помощи пользовательской функции.
19 Деление на справочник и факт Разделим один датасет на два датасета: справочник и факт.
20 Создание параметра Мы можем ввести значение в какую-то ячейку Excel, а потом передать это значение в формулу Power Query.
21 Таблица параметров Создадим целую таблицу параметров и будем их использовать в запросах Power Query.
22 Объединение таблиц по вертикали, когда не совпадают заголовки столбцов Как объединить две таблицы по вертикали, если названия столбцов не совпадают.
23 Поиск ключевых слов Научимся искать ключевые слова в текстовом поле.
24 Поиск ключевых слов 2 Будем искать ключевые поля в текстовом поле и присваивать этому значению какую-то категорию.

Понравилась статья? Поделить с друзьями:
  • Слова песни элтона джона sorry seems to be the hardest word
  • Слияние таблиц excel впр
  • Слияние существующий в ms word
  • Слияние строки в excel
  • Слияние столбцов в excel без потери данных