Найти тему
Марко в поло

Связи между таблицами в Power BI

Оглавление

Есть масса статей по использованию продвинутых техник в Power BI. Но при этом есть огромный пробел в базовых вопросах по данному инструменту.

Данной статьей я хотел бы закрыть вопрос о связях (Relationships) между таблицами. Что такое связи? Зачем они нужны?

Что такое связи в Power BI?

Давайте рассмотрим на примере. Предположим, у нас есть таблица с информацией о магазинах, и мы хотим проанализировать ее в Power BI. Таблица выглядит следующим образом:

Если в отчете построить визуализацию по количеству магазинов c разбивкой по географии, то получится следующее:

-2

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

-3

А что если у меня больше 1 таблицы?

Что ж, давайте посмотрим что будет если у нас больше чем 1 таблица. Предположим, что у нас еще есть таблица с данными по продажам по каждому из магазинов. Таблица содержит следующие столбцы:
- ID магазина
- Номер заказа
- Дата заказа
- Количество заказанного товара
- Комментарий к платежу
- Артикул

-4

Для изучения того как работают связи я бы рекомендовал вам отключить (на время!) автоопределение связей в Power BI. Делается это следующим образом (я обычно использую англоязычную версию, поэтому скрины все будут на английском):

-5
Необходимо снять галки для отключения автоопределения связей между таблицами.
Необходимо снять галки для отключения автоопределения связей между таблицами.

Если мы загрузим обе таблицы, то увидим такую картину:

-7

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

-8

Данный отчет похож на предыдущий, если теперь раскрасить нашу таблицу с учетом фильтра, то получим:

-9

Построим визуализацию по продажам в каждом из штатов:

-10

Наблюдаем странную картину: в каждом штате продано по 493 книги. Кажется что-то пошло не так. Фильтр не отрабатывает как должен. Произошло это потому, что в таблице по продажам нет информации по штату, но есть ID магазина.

-11

При этом в таблице по магазинам нет информации о проданных товарах и их количестве. Но нам нужны обе таблицы для составления полноценного отчета.

Общим полем для обеих таблиц является поле stor_id, по которому мы и можем сопоставить информацию о наших филиалах и продажах в каждом из них.

Общее поле stor_id
Общее поле stor_id

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

Магазин Barnum's (ID 7066) находится в городе Tustin, штат Калифорния
Магазин Barnum's (ID 7066) находится в городе Tustin, штат Калифорния

В другой таблице мы видим количество продаж в магазине с ID равным 7066.

-14

Таким образом получается, что мы можем связать обе таблицы с помощью столбца stor_id.

Связи (Relationships)

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

-15

После данного действия должна появиться линия между обеими таблицами, означающая связь между ними.

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

Разные названия

Как я уже обозначил ранее оба столбца могут иметь одинаковые имена, что и позволяет системе автоматически обнаруживать связи между таблицами. Мы отключили данную функции ранее, чтобы сделать процесс нагляднее. По умолчанию в Power BI данная опция включена и без вашего участия построила бы связь между таблицами по полю stor_id.

-17

Другой способ определения связей

На вкладке Home в Power BI Desktop надо кликнуть на кнопке Manage Relationships.

-18

Появится окно редактора связей, в котором видны все существующие связи между таблицами. Можно создать новую связь вручную с помощью кнопки New... Также есть вариант автоопределения связей между всеми таблицами (кнопка Autodetect).

-19

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

-20
Результат создания связей
Результат создания связей

Редактирование связей

Есть 2 варианта редактирования связей:

1. Зайти в Редактор связей (Manage Relationships)

-22

2. Дважды кликнуть по линии связи между двумя таблицами.

-23

Совпадение данных.

Оба поля, между которыми вы создаете связь, должны иметь один и тот же тип данных, или типы данных, сопоставляемых друг с другом. Например Текст -> Текст, иначе появится окно с ошибкой.

Поля должны быть в обеих таблицах.

Оба сопоставляемых поля должны присутствовать в обеих таблицах. В нашем примере это поле stor_id.

Фильтрация

Цель создания связей между таблицами - возможность фильтрации данных по полям из двух разных таблиц.

-24

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

-25
-26

Итог

Связи это важная часть в моделировании в Power BI. Они позволяют нам производить фильтрацию по 2 и более таблицам без использования сложных функций для поиска и сопоставления значений в таблицах.