Выбор правильного типа слияния/объединения в Power BI

Tags: Power BI, таблица

Ранее мы объясняли два способа объединения наборов данных друг с другом: Append и Merge. В этой статье мы хотим подробно объяснить, в чем разница между всеми типами типа слияния и объяснением того, как выбрать правильный тип слияния (Merge) или объединения (Join). Эти типы слияния очень похожи на типы соединений в реляционных базах данных. Поскольку многие люди, которые работают с Power BI, могут не иметь опыта работы с реляционными базами данных, то этот пост, вероятно, является хорошим объяснением в деталях, каковы эти типы и когда их использовать.

Набор данных для примера

Загрузите набор данных отсюда:

Download

Что такое слияние?

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

Давайте рассмотрим это с примером;

Рассмотрим две таблицы данных:

* Таблицы данных получены с этой веб-страницы. Загрузите его по ссылке вверху этой публикации.

 

Таблица клиентов:



Таблица заказов:



Слияние этих двух таблиц друг с другом дает вам набор данных с объединенным набором столбцов, как показано ниже;



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

 

Как сделать слияние запросов

Выберите первый запрос (для этого примера: Orders), а затем из домашней вкладки Merge Queries появится два варианта:

  • Merge Queries: это изменит существующий запрос (заказы), чтобы быть результатом слияния.
  • Merge Queries as New: это не изменит существующий запрос. Он создаст ссылку из него, и результатом слияния будет другой запрос.

Выберите «Merge Queries as New».

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

Результатом этой операции будет новый запрос с именем Merge1, который имеет объединенный результат этих двух запросов.

Таблица в столбце Customers - это вспомогательная таблица из таблицы клиентов для записей, соответствующих этому customer_id. Затем вы можете расширить его до нужных столбцов;

и конечным результатом будут теперь все столбцы в одном запросе;

Этот процесс называется Merge Join. Однако есть некоторые конфигурации, которые вы можете здесь настроить;

Слияние на основе нескольких столбцов

Вы можете легко использовать несколько столбцов для слияния двух наборов данных. Просто выберите их в нужном порядке, удерживая клавишу Ctrl клавиатуры.

Этот метод может быть действительно полезен, поскольку вкладка отношений в Power BI Desktop не позволяет создавать отношения на основе нескольких столбцов. Однако в Power Query вы можете создать слияние и создать уникальное поле для отношений в Power BI Desktop. Вот статья об этом.

Типы слияния

В дополнение к столбцу слияния (или соединяющему полю); тип Merge очень важен. вы можете получить совершенно другой набор результатов с выбором другого типа слияния. Здесь вы можете увидеть Join Kind (или Merge Type);

В данный момент существует 6 типов объединений. Пару лет назад было доступно меньшее количество соединений. Однако вы всегда можете выбрать тип Join в сценарии Power Query M.

Каждое из этих объединений получает другой результирующий набор, давайте посмотрим, какова их разница.

LEFT и RIGHT.

Чтобы начать, вам нужно знать концепцию таблиц LEFT и RIGHT (или запросов). Когда вы объединяете два набора данных друг с другом, первый запрос считается LEFT, а второй - RIGHT.

В приведенном выше примере; Заказы - это запрос LEFT, а клиенты - это запрос RIGHT. При желании их можно изменить. Понимание этого важно, потому что большая часть форм Join работает с концепцией LEFT или RIGHT или же обоих.

Left Outer (Все строки из первой, совпадение со второй)

Первый тип Join / Merge - Left Outer. Это означает, что запрос LEFT является важным. Все записи из этого запроса (LEFT или FIRST) будут показаны в наборе результатов плюс их соответствующие строки в правой (или второй таблице). Этот тип соединения является типом по умолчанию. Если вы не укажете Join Kind, он будет всегда Left Outer.

Например, в первом примере слияния, который мы сделали, вы можете видеть, что набор результатов - 4 записи, представляющие 4 записи из левой таблицы (заказов) и соответствующие им строки в таблице клиентов.

Как вы можете видеть на скриншоте выше; есть два клиента, которых не будет в результирующем наборе. Клиенты с идентификаторами 4 и 5, потому что эти строки не соответствуют полю customer_id в таблице заказов. В LEFT Outer merge будут выбраны только записи из левой таблицы с соответствующими строками правой таблицы.

Right Outer (все строки из второй, совпадение с первой)

Иногда вам нужно получить все строки из второй таблицы, независимо от того, существуют ли они в первой таблице или нет. В этом случае вам нужно будет использовать другой тип Join, называемый Right Outer. С помощью этого типа Join вы получаете все строки из таблицы RIGHT (или second) с соответствующими строками слева (или первой таблицы). Вот пример:

Как вы можете видеть на скриншоте выше; все строки из таблицы клиентов отображаются в результирующем наборе, однако только 4 строки соответствуют таблице заказов. Если в таблице заказов нет записи, которая не соответствует ей, она будет выглядеть как Null (две красные строки в результирующем наборе).

Full Outer (все строки из обеих)

Этот тип соединения / слияния, как правило, самый безопасный среди всех. Он вернет все строки из обеих таблиц (соответствие и несоответствие). Вы будете иметь все строки из первой таблицы, а также все строки из второй таблицы и все соответствующие строки. С помощью этого метода вы не потеряете никаких записей.

Этот результат, как вы можете видеть, - 7 строк. 4 соответствия строк в обеих таблицах. 2 строки только в таблице клиентов, но не в таблице заказов. 1 строка только в таблице заказов, но не в таблице клиентов.

Inner (только соответствующие строки)

Этот метод выбирает только соответствующие строки. У вас не будет записи с нулевыми значениями (потому что эти записи генерируются в результате несоответствия). Вот пример:

Есть только 4 строки, которые сопоставляются между двумя таблицами. Строки с customer_id 1, 2 и 3. все не соответствующие строки будут исключены из набора результатов.

Left Anti  (строки только в первой)

Если вас интересуют только строки из таблицы LEFT (первая), тогда это опция для выбора. Это означает, что строки находятся в первой таблице и НЕ совпадают со второй таблицей. Таким образом, только не соответствующие строки из первой таблицы. С параметрами Anti всегда вы получаете значение null для второго набора данных, поскольку эти строки там не существуют. Параметры защиты подходят для поиска строк, которые существуют в одной таблице, но не в другой. Вот пример:

Это найдет единственную строку, которая существует в таблице Orders и не соответствует ни одной из строк в таблице клиентов.

Right Anti (строки только во второй)

Аналогично Left Anti; этот метод даст вам только не соответствующие строки. Однако на этот раз со второй (правой) таблицы. Вы можете узнать, какие строки в правой таблице не совпадают с левой таблицей. Вот пример;

Этот набор результатов - это все строки из таблицы клиентов (правая таблица), которые НЕ соответствуют заказам (первая таблица).

Резюме

Различные типы объединения в слиянии возвращают разные результирующие множества. Убедитесь, что вы выбрали правильный тип соединения, чтобы избежать каких-либо проблем позже. Существует шесть типов объединений, как показано ниже;

  • Left Outer: Строки из левой таблицы и соответствующие справа
  • Right Outer: строки из правой таблицы и соответствующие слева
  • Full Outer: строки из обеих таблиц (совпадающие или не совпадающие)
  • Внутренний: только соответствие строк из обеих таблиц
  • Left Anti: Не  соответствующие строки из левой таблицы
  • Right Anti: Не соответствующие строки из правой таблицы

No Comments

Add a Comment