Объединение таблиц в Power Query вместо ВПР
Оригинал лежит тут → https://www.planetaexcel.ru/upload/goodbye-vlookup-chapter.pdf
Лучше смотреть через него либо в файле, потому что все картинки при копировании затерлись.
Объединение таблиц: забудьте про ВПР
Любая достаточно развитая технология
неотличима от волшебства.
(Артур Кларк)
Теперь давайте на примерах рассмотрим второй тип слияния запросов в Power Query – объединение (merge).
Предположим, что у нас имеются три таблицы: с данными по продажам, прайс-лист на товары и справочник по
регионам и менеджерам:
На выходе необходимо посчитать суммарную выручку по каждому товару (с учетом скидок) для каждого
региона. При этом количество проданного у нас в первой таблице, цены надо подтягивать из второй, а
информация о регионах для каждого менеджера есть только в третьей. Если решать эту задачу классическим
путем, то пришлось бы как минимум к первой таблице добавлять пару вычисляемых столбцов с функциями
ВПР (VLOOKUP), ПОИСКПОЗ (MATCH) и ИНДЕКС (INDEX), а потом вычислять итоги с помощью сводной таблицы.
Давайте посмотрим, как всё вышеперечисленное можно изящно сделать не формулами, а через Power Query.
Загружаем все таблицы как подключения
Сначала превратим таблицы в «умные», дадим им понятные имена (я назвал их
Продажи, Прайс и География соответственно) и загрузим их в Power Query по
очереди, используя кнопку Из таблицы / диапазона на вкладке Данные (Data
From Table / Range) и вернемся потом обратно в режиме Только создать
подключение (Only Create Connection).
Чуть позже в главе Загрузка «умных» таблиц в Power Query макросом мы научимся
быстро делать массовую загрузку сразу всех «умных» таблиц из книги в Power
Query, но пока этот относительно скучный шаг надо проделать вручную.
Выполняем слияние
Чтобы добавить цены из прайса к таблице продаж, на вкладке Данные выберем команду Получить данные
Объединение запросов Объединить (Data Get Data Combine queries Merge).
В открывшемся окне сверху выберем таблицу, к которой мы хотим добавить данные (Продажи), а снизу
таблицу, откуда мы хотим их подставить (Прайс). Затем выделим мышкой столбцы Товар и Продукт в обеих
таблицах, по которым должен идти поиск и подстановка:
Скульптор данных в Excel с Power Query www.PlanetaExcel.ru
81
Обратите внимание, что в нижней части окна есть выпадающий список, где можно выбрать тип соединения:
Чуть позже мы подробно разберем каждый вариант, а пока что достаточно знать, что первый пункт из этого
списка – Внешнее соединение слева (Left Outer Join) – это как раз то, что делает функция ВПР, и то, что нам
нужно в этом примере.
Ещё один важный нюанс в том, что внизу окна Power Query напишет фразу «Выбор согласовал 199 из первых
строк (200)». В переводе на человеческий язык это означает, что он смог найти только 199 цен к 200 наших
исходных сделок, т. е. один из товаров в таблице Продажи был не найден в прайс-листе. Чуть позже мы
разберемся и с этим, а пока нажмем ОК.
Должно открыться окно редактора запросов, где мы увидим новый запрос со стандартным именем Merge1, в
котором будет наша исходная таблица продаж с добавленным к ней столбцом Прайс. В каждой ячейке этого
столбца будет таблица с фрагментом прайс-листа, соответствующим данному товару. Увидеть её содержимое
можно, щелкнув мышью в белый фон ячейки со словом Table (но не в слово Table!):
Скульптор данных в Excel с Power Query www.PlanetaExcel.ru
82
Теперь развернем вложенные таблицы, используя кнопку с двойными стрелками в заголовке столбца Прайс.
Из выпадающего списка можно выбрать те столбцы прайс-листа, которые мы хотим подставить, и снять флажок
Использовать исходное имя столбца как префикс (Use original column name as prefix), чтобы новые столбцы
назывались просто Цена и Скидка, а не Прайс.Цена и Прайс.Скидка:
После нажатия на ОК мы достигнем желанной цели: к нашей таблице продаж добавятся колонки с ценами и
скидками из прайс-листа:
Исправляем ошибки
Думаю, вам известно, что когда функция ВПР (VLOOKUP) не находит искомого значения, то она выдает ошибку
Н/Д (#N/A). Power Query же реагирует на подобные ситуации по-другому, что хорошо видно в 8-й строке
нашей итоговой таблицы. Поскольку (в отличие от ВПР) объединение происходит с учётом регистра, «джинсы»
с маленькой буквы не нашлись в прайс-листе (где они есть, но с заглавной), и напротив них в таблице появилось
значение null.
Скульптор данных в Excel с Power Query www.PlanetaExcel.ru
83
null – это специальное слово (и тип данных) в Power Query, обозначающее пустоту1
. В отличие от Excel, где
пустая ячейка может быть чем угодно – от формулы, выводящей пустую строку «», до форматирования «белым
на белом», в Power Query этот вопрос имеет однозначный ответ: null – значит пусто.
Вопрос, что с этими null теперь делать. Тут есть три варианта.
- Ничего не делать. Ячейки с null в Power Query потом на листе Excel превратятся просто в пустые ячейки.
- Заменить null на что-то полезное. Щёлкнув правой кнопкой мыши по заголовку столбца с ошибками,
можно выбрать в контекстном меню команду Заменить ошибки (Replace Errors) и ввести значение, на
которое вы хотите их заменить (например, на 0 или на «здесь ошибка»). - Если ошибку можно исправить на лету, как в нашем случае, то проще всего будет сделать это тут же.
Для этого переключимся в запрос Продажи через левую панель в редакторе, выделим столбец Товар
и исправим в нем регистр с помощью команды Формат Каждое Слово С Прописной на вкладке
Преобразование (Transform Format Capitalize Each Word):
Вернувшись после этого в запрос Merge1, мы увидим, что ошибка исчезла.
Объединение в этом же запросе
Чтобы объединить две таблицы, не обязательно создавать отдельный третий запрос: во многих случаях бывает
удобнее выполнить это здесь же, на месте, в текущем запросе, с которым мы имеем дело.
Давайте подобным образом добавим к нашей сборке данные из третьей таблицы География. Для этого,
находясь в запросе Merge1, выберем на вкладке Главная команду Объединить запросы Объединить
запросы (Home Merge Queries Merge Queries):
Мы увидим уже знакомое окно, где нужно будет выбрать запрос География в качестве второй таблицы для
объединения и выделить общие столбцы (Продавец и Менеджер) в этих таблицах, как мы делали ранее:
1 Подробнее про null см. главу Тип null ближе к концу этой книги.
Скульптор данных в Excel с Power Query www.PlanetaExcel.ru
84
После нажатия на ОК и разворачивания вложенных таблиц, как в предыдущем случае, мы увидим
подставленные данные из третьей таблицы – столбцы Город, Статус и Регион:
Теперь можно добавить к нашей таблице вычисляемый столбец для выручки. Для этого на вкладке Добавление
столбца (Add Column) нажмем на кнопку Настраиваемый столбец (Custom Column) и введем в открывшееся
окно имя нового столбца и формулу для его расчёта:
Скульптор данных в Excel с Power Query www.PlanetaExcel.ru
85
Что интересно, после нажатия на ОК и создания вычисляемого столбца для выручки можно совершенно
безнаказанно удалить колонки, которые участвуют в её вычислении, например Количество, Цену и Скидку. Это
никак не повлияет на столбец Выручка:
Для большинства пользователей, привыкших к формулам на листе Excel, этот момент будет слегка необычным.
Однако, если подумать, это даёт нам возможность избавляться в запросах от ненужных более столбцов в любой
момент, не задумываясь о том, в каких вычислениях они раньше участвовали. А чем раньше вы избавитесь от
лишних данных, тем быстрее будет работать ваш запрос.