Объединение и добавление запросов (Merge / Append)

Соединяем таблицы двумя способами: рядом по ключу (merge) и стопкой (append).

Merge добавляет к таблице столбцы из другой по ключу (как SQL JOIN); Append подставляет строки одной таблицы под строки другой (как UNION).

Две разные задачи

Данные почти никогда не лежат в одной таблице. Иногда нужно дополнить строки полями из справочника (к заказу подтянуть регион клиента) — это merge. Иногда нужно сложить однотипные таблицы в одну (январь + февраль + март) — это append. Путать их нельзя: это операции с принципиально разным результатом.

Append — складываем строки

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

Январь          Февраль                 РЕЗУЛЬТАТ (append)
┌────┬─────┐    ┌────┬─────┐             ┌────┬─────┐
│дата│сумма│    │дата│сумма│             │дата│сумма│
│ 5  │ 100 │  + │ 12 │ 200 │   ────>     │ 5  │ 100 │
│ 9  │ 150 │    │ 18 │ 300 │             │ 9  │ 150 │
└────┴─────┘    └────┴─────┘             │ 12 │ 200 │
                                         │ 18 │ 300 │
                                         └────┴─────┘

Merge — добавляем столбцы по ключу

Merge соединяет таблицы по общему ключу и подтягивает столбцы. К таблице «Заказы» (есть customer_id) присоединяем «Клиенты» (есть id и регион) — и у каждого заказа появляется регион. Это прямой аналог SQL-соединения:

SELECT o.order_id, o.amount, c.region
FROM orders o
LEFT JOIN customers c ON c.id = o.customer_id;

В Power Query при merge выбирают тип соединения — он определяет, какие строки попадут в результат.

Тип JoinЧто оставит
Left Outerвсе строки левой + совпадения справа (чаще всего)
Innerтолько строки с совпадением в обеих
Full Outerвсе строки обеих таблиц
Antiстроки без пары (поиск «осиротевших»)

Как работает под капотом

Append — это M-функция Table.Combine: она просто выстраивает строки в стопку, сопоставляя столбцы по имени (несовпадающие имена дадут лишние столбцы с null). Merge — это Table.NestedJoin: к каждой строке левой таблицы прикрепляется вложенная таблица совпадений из правой, которую затем «разворачивают» в нужные столбцы. Важно: после merge на новых данных Power BI заново выполнит соединение, поэтому ключ должен быть стабильным и уникальным в справочнике, иначе строки «размножатся».

Частые ошибки

  • Использовать merge вместо связи в модели. Часто справочник лучше связать в модели данных (звезда), а не «вплавлять» столбцы в факт через merge — это гибче и экономнее.
  • Merge по неуникальному ключу. Если в справочнике ключ повторяется, строки дублируются и суммы раздуваются.
  • Append таблиц с разной структурой. Несовпадающие имена столбцов дадут «дыры» из null.

Итог

  • Append складывает строки однотипных таблиц (как UNION) — для месячных выгрузок.
  • Merge подтягивает столбцы по ключу (как JOIN) — для обогащения данных из справочников.
  • Тип join в merge определяет, какие строки уцелеют; ключ должен быть уникальным.
Проверьте себя
1. Нужно склеить 12 одинаковых по структуре месячных таблиц в одну. Какая операция?
AMerge
BAppend
CPivot
DGroup By
2. Merge по неуникальному ключу справочника приведёт к...
AУскорению отчёта
BДублированию строк и раздуванию сумм
CУдалению данных
DСмене типа столбца