Связи многие-ко-многим в Power BI

В обновлении Power BI Desktop от 22 июля 2018 появилась новая замечательная возможность — создавать связи «многие-ко-многим» (Many-To-Many, или M2M) между таблицами модели данных. Пока еще в предварительной версии, то есть не работающее в Power BI Service, но очень интересное нововведение.

До этого обновления в Power BI можно было создавать связи только двух видов: «один к одному» и «многие-к-одному«. Новый тип связи появился в связи с введением в пробную эксплуатацию так называемой «композитной», или «составной» модели, позволяющей использовать в проекте одновременно как источники, подключенные в режиме Direct Query (например, MS SQL Server), так и источники в режиме Import (например, файл Excel), или сразу несколько источников Direct Query. Связи «многие-ко-многим» на текущий момент являются единственным способом связи между источниками, подключенными в разных режимах (DQ и Import), независимо от их фактической кратности.

Однако применение нового типа связи «многие-ко-многим» не ограничивается только рамками композитной модели — такие связи теперь можно устанавливать между любыми таблицами Power BI!

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

Реализация связей «многие-ко-многим» в Power BI сопряжена с рядом ограничений. Сейчас их всего три (они действуют именно для таблиц, связанных таким способом):

  1. Невозможно использовать функцию RELATED для получения данных связанной таблицы (так как связанными могут оказаться несколько строк).
  2. Не создаются пустые строки для группировки строк, отсутствующих в связанной таблице (а также для строк, имеющих Null в столбце связи другой таблицы).
  3. Функция ALL(), примененная к одной из таблиц, не сбрасывает фильтры, примененные к связанной таблице (а, например, в связи «один-ко-многим» функция ALL(Table) сбрасывает все фильтры со столбцов таблицы, в том числе фильтры, примененные к столбцам таблиц, связанных с находящихся на стороне «один»).

Эти ограничения не так очевидны, и неподготовленный аналитик может быть неприятно удивлён неожиданному поведению мер и визуальных элементов.

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

Я считаю, что появление составной модели и нового вида связи между таблицами — это крупнейшее изменение в моделировании данных в Power BI  после введения двунаправленной фильтрации. И хотя пока этот тип связи вызывает много вопросов, меня однозначно радует всё, что касается новых инструментов подготовки данных и моделирования в Power BI: приятно смотреть, как любимый инструмент развивается и становится всё мощнее и мощнее. А судя по опубликованному roadmap до октября 2018 года, планов относительно развития Power BI у Microsoft очень много. Нет, не так. ОЧЕНЬ МНОГО.

Share this
Абсолютные и относительные ссылки в Power Query — подход в стиле Excel

Добавить комментарий

Your email address will not be published / Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.