Есть масса статей по использованию продвинутых техник в Power BI. Но при этом есть огромный пробел в базовых вопросах по данному инструменту.
Данной статьей я хотел бы закрыть вопрос о связях (Relationships) между таблицами. Что такое связи? Зачем они нужны?
Что такое связи в Power BI?
Давайте рассмотрим на примере. Предположим, у нас есть таблица с информацией о магазинах, и мы хотим проанализировать ее в Power BI. Таблица выглядит следующим образом:
Если в отчете построить визуализацию по количеству магазинов c разбивкой по географии, то получится следующее:
Как видим, данный отчет фильтрует таблицу и наглядно отображает количество записей для каждого штата. Визуализация фильтра в таблице:
А что если у меня больше 1 таблицы?
Что ж, давайте посмотрим что будет если у нас больше чем 1 таблица. Предположим, что у нас еще есть таблица с данными по продажам по каждому из магазинов. Таблица содержит следующие столбцы:
- ID магазина
- Номер заказа
- Дата заказа
- Количество заказанного товара
- Комментарий к платежу
- Артикул
Для изучения того как работают связи я бы рекомендовал вам отключить (на время!) автоопределение связей в Power BI. Делается это следующим образом (я обычно использую англоязычную версию, поэтому скрины все будут на английском):
Если мы загрузим обе таблицы, то увидим такую картину:
Между таблицами нет никаких связей. Теперь если мы захотим отфильтровать и узнать общее количество книг, проданных в том или ином магазине, то сможем сделать это с помощью визуализации:
Данный отчет похож на предыдущий, если теперь раскрасить нашу таблицу с учетом фильтра, то получим:
Построим визуализацию по продажам в каждом из штатов:
Наблюдаем странную картину: в каждом штате продано по 493 книги. Кажется что-то пошло не так. Фильтр не отрабатывает как должен. Произошло это потому, что в таблице по продажам нет информации по штату, но есть ID магазина.
При этом в таблице по магазинам нет информации о проданных товарах и их количестве. Но нам нужны обе таблицы для составления полноценного отчета.
Общим полем для обеих таблиц является поле stor_id, по которому мы и можем сопоставить информацию о наших филиалах и продажах в каждом из них.
Давайте рассмотрим пример:
В другой таблице мы видим количество продаж в магазине с ID равным 7066.
Таким образом получается, что мы можем связать обе таблицы с помощью столбца stor_id.
Связи (Relationships)
Если вы хотите запросить данные сразу из двух таблиц и эти данные должны быть связаны между собой, то необходимо создать связь между таблицами по какому-либо общему полю (если эти таблицы не связаны через другие таблицы). В окне редактирования связей необходимо просто наложить поле из одной таблицы в другую (при этом у них могут быть разные названия).
После данного действия должна появиться линия между обеими таблицами, означающая связь между ними.
Разные названия
Как я уже обозначил ранее оба столбца могут иметь одинаковые имена, что и позволяет системе автоматически обнаруживать связи между таблицами. Мы отключили данную функции ранее, чтобы сделать процесс нагляднее. По умолчанию в Power BI данная опция включена и без вашего участия построила бы связь между таблицами по полю stor_id.
Другой способ определения связей
На вкладке Home в Power BI Desktop надо кликнуть на кнопке Manage Relationships.
Появится окно редактора связей, в котором видны все существующие связи между таблицами. Можно создать новую связь вручную с помощью кнопки New... Также есть вариант автоопределения связей между всеми таблицами (кнопка Autodetect).
Для создания новой связи необходимо в выпадающем меню выбрать одну из наших таблиц и выделить колонку которую мы хотим связать. Такую же операцию надо проделать с выпадающим окном ниже. Только выбрать надо вторую нашу таблицу.
Редактирование связей
Есть 2 варианта редактирования связей:
1. Зайти в Редактор связей (Manage Relationships)
2. Дважды кликнуть по линии связи между двумя таблицами.
Совпадение данных.
Оба поля, между которыми вы создаете связь, должны иметь один и тот же тип данных, или типы данных, сопоставляемых друг с другом. Например Текст -> Текст, иначе появится окно с ошибкой.
Поля должны быть в обеих таблицах.
Оба сопоставляемых поля должны присутствовать в обеих таблицах. В нашем примере это поле stor_id.
Фильтрация
Цель создания связей между таблицами - возможность фильтрации данных по полям из двух разных таблиц.
В итоге, когда построим визуализацию, мы увидим, что все работает как надо:
Итог
Связи это важная часть в моделировании в Power BI. Они позволяют нам производить фильтрацию по 2 и более таблицам без использования сложных функций для поиска и сопоставления значений в таблицах.