Назад к основам: раскрытие тайны отношений Power BI
Существует множество статей о расширенных советах по моделированию Power BI, таких как расширенный DAX и контекстный переход. Однако, основываясь на опыте работы с нашими клиентами, мы поняли, что существует большой пробел в базовом контенте. Следовательно, эта статья собирается охватить основы связей, дать ответы на вопросы: Что такое связи (отношения)? Зачем они нужны? А что логически происходит за сценой отношений?
Что такое связь в Power BI?
Давайте рассмотрим смысл отношений через пример. Допустим, у вас есть одна таблица для Store, и вы хотите проанализировать ее в Power BI. Наша таблица Store выглядит так:
В отчете Power BI, если вы хотите создать визуализацию, которая представляет собой количество магазинов в State, это будет выглядеть так:
Как видите, State может отфильтровать таблицу, чтобы показать количество записей для каждого состояния. Если мы хотим визуализировать фильтрацию, это будет выглядеть так:
Что делать, если у нас более одной таблицы?
Теперь давайте проверим, что произойдет, если у нас более одной таблицы. Допустим, в качестве решения также есть таблица продаж. В таблице продаж есть некоторая информация, например, сколько названий каждой книги, на какую дату, в каком магазине продается. Вот скриншот данных в таблице продаж:
Чтобы изучить отношения, рекомендуем отключить автоматическое обнаружение отношений (имеется в виду не навсегда! Просто для целей этого обучения). Наличие отношений автоопределения мешает вам узнать, что происходит за кулисами. Если вы хотите отключить эту функцию, вам сначала нужно перейти к параметрам Power BI Desktop:
И вот варианты, чтобы снять отметку, если вы хотите отключить автоматическое обнаружение отношения:
Если мы загрузим таблицу Sales также в том же решении, теперь у нас будет две таблицы. Без каких-либо отношений (потому что отношения автоопределения отключены), как показано ниже:
Теперь, если мы хотим отфильтровать и выяснить, каково общее количество названий книг, проданных в каждом магазине, мы можем сделать это с помощью такого визуального элемента:
Это было бы очень похоже на предыдущую визуализацию в таблице Store. Фильтрация происходит все в одной таблице, однако на этот раз это Sales;
Теперь давайте сделаем визуализацию, подобную этой: общее количество наименований, проданных в каждом штате:
Как видно из приведенной выше визуализации, общее количество для каждого состояния составляет 493! И общее количество в таблице продаж также 493! Очевидно, что на этот раз фильтрация произошла неправильно. Потому что Sales знает только о stor_id, а не о состоянии:
Если мы хотим отфильтровать эту таблицу по хранилищу, единственное поле, которое дает нам такую возможность, это stor_id, и оно ничего не знает о состоянии.
С другой стороны, таблица Store имеет поле состояния, но ничего не знает о Sale и Qty! Однако в этой таблице также есть поле stor_id. Который является уникальным идентификатором магазина для каждой строки (магазина):
В этом примере нам нужны обе таблицы, потому что они обе содержат поля, которые нам нужны в нашей визуализации: поле State из таблицы Store и поле Qty из таблицы Sales. Поле stor_id - это поле, которое может помочь нам найти одно значение в другой таблице. Давайте посмотрим на это на примере:
Магазин Barnum находится в Тустине, в штате Калифорния. и идентификатор этого магазина 7066:
С другой стороны, в таблице Sales указывается, сколько продаж было у нас в магазине 7066 (который является магазином Барнума):
Эти две таблицы могут быть связаны друг с другом, используя stor_id. Или, проще говоря, эти две таблицы могут быть связаны друг с другом с помощью поля stor_id.
Отношения
Если вы хотите запросить данные из двух таблиц, и данные этих двух таблиц должны быть каким-то образом связаны, то вы можете создать связь между ними (если эти две таблицы не связаны через другие таблицы).
Чтобы создать связь между двумя таблицами, вам нужно поле, которое может связать эти две таблицы вместе. Мы называем это поле полем отношений. Вы можете просто перетащить это поле из одной из таблиц ( источник или место назначения не имеют значения) и поместить его в то же поле в другой таблице.
После перетаскивания вы должны увидеть отношения, созданные следующим образом:
Созданная связь может не располагаться так, чтобы точно указывать от stor_id до stor_id. Однако, когда вы щелкаете по строке отношения, вы видите, что поля, которые являются частью отношения, подсвечиваются.
Поля могут иметь разные имена
Два поля из двух таблиц могут иметь одинаковые имена или разные имена. Если у них одинаковое имя (или, скажем, похожий шаблон имени), Power BI может автоматически обнаружить эту связь. Помните, что мы отключили эту функцию ранее в этой статье, чтобы облегчить процесс обучения. По умолчанию связь автоопределения включена и обнаружила бы такой сценарий, что у нас был stor_id в обоих полях, и мы создали бы эту связь.
Если имена полей отличаются, то вам нужно создать связь вручную. Как то, что мы сделали выше. Кроме того, есть и другой способ создать отношения.
Создание отношений с помощью параметра меню Manage Relationship
На вкладке Home в Power BI Desktop вы можете нажать Manage Relationship:
Вы увидите окно Manage Relationship, в котором будут показаны все существующие отношения и их столбцы «от» и «до». Вы можете создать новый, нажав на New. Вы также можете заметить, что рядом с New есть опция “autodetect”, на случай, если вы захотите ее использовать.
Мы не можем видеть отношения, которые были созданы на предыдущем шаге, здесь, потому что они были удалены вручную, чтобы создать их снова таким образом, но мы покажем вам второй способ их создания.
После нажатия на New relationship, затем в окне Create Relationship вы сможете установить исходную таблицу и таблицу назначения, а также нажать поле отношения, чтобы выделить его в каждой таблице. Как то, что показано на рисунке ниже:
Если вы выберете таблицу Stores в качестве источника или таблицу Sales в качестве источника, разница не изменится, однако, количество элементов сделает процесс другим. Power BI обычно достаточно умен, чтобы понять мощность связи. Тем не менее, сама мощность связи является большой темой в отношениях, о которой мы расскажем позже в другой статье.
Есть много других конфигураций в окнах Create Relationship, и каждая из них нуждается в полном обсуждении статьи для себя. В этой статье мы сосредоточимся только на основах отношений. После нажатия OK с приведенной выше конфигурацией вы должны получить ту же диаграмму отношений, что и на предыдущем шаге:
Редактирование отношений
Если вы хотите редактировать отношения, вы можете либо перейти в раздел Manage Relationship на вкладке Home, найти это отношение и отредактировать его:
Или вы можете просто дважды щелкнуть по линии связи между двумя таблицами,
Типы данных должны совпадать
Два поля, которые вы соединяете друг с другом, должны иметь одинаковый тип данных или тип данных, которые могут быть сопоставлены друг с другом (например, текст в число), в противном случае при создании отношения вы получите ошибку ,
Поле связывания должно присутствовать в обеих таблицах
Если у вас нет поля ссылки в одной из таблиц, то, очевидно, вы не сможете создать отношения между ними. В приведенном выше примере stor_id является нашим полем ссылки, и он ДОЛЖЕН существовать в обеих таблицах.
Отношение подразумевает фильтрацию по таблицам
Вся цель создания отношений в Power BI состоит в том, чтобы иметь возможность фильтровать данные по полям из двух отдельных таблиц. Создание отношения, как в примере выше, подразумевает следующее соединение двух таблиц:
Теперь после создания отношений, мы видим, что визуализация работает отлично:
За сценой это подразумевает следующую фильтрацию:
За сценой находится поле Stor_id, соединяющее эти две таблицы. Первая таблица фильтруется по состоянию, а затем вторая таблица (через отношения stor_id) также фильтруется для каждого состояния.
Другие свойства отношений
Есть несколько других важных свойств отношений, которые мы споясним в следующих нескольких статьях, таких как:
- Мощность связи (1-1, 1-ко-многим, многие-к-1, многие-ко- многим)
- Направление Отношения
- Активные или неактивные отношения
- Отношения, основанные на нескольких полях
Резюме
Однако отношения являются одной из основ, одной из наиболее важных частей моделирования Power BI. Если вы исходите из базы данных, у вас уже есть хорошее понимание отношений. Если вы исходите из Excel или бизнеса, вы можете рассматривать каждое отношение как справочную таблицу.
Именно отношения делают возможной фильтрацию по нескольким таблицам. В этой статье вы узнали об основах отношений, таких как, зачем они нам нужны, как создавать отношения и что логически происходит за сценой отношений.
В будущих статьях вы узнаете о других важных особенностях отношений.