Работа с отношениями и кратностью

Завершено

В отличие от других систем управления базами данных, Power BI имеет концепцию направленности на отношение. Эта направленность играет важную роль в фильтрации данных между несколькими таблицами. Когда вы загружаете данные, Power BI автоматически ищет отношения, существующие в данных, путем сопоставления имен столбцов. Вы также можете вручную изменять эти параметры в окне Управление связями.

Например, вы получили много таблиц из базы данных Sales, и на следующем рисунке показан пример семантической модели. Power BI автоматически обнаружил несколько отношений, но вы не можете понять, что они означают. Вы хотите убедиться, что эти отношения точно отражают связи, существующие в ваших данных.

Отношения

Ниже описаны различные типы отношений, существующие в Power BI.

Отношение "многие к одному" ((*:1)) или "один ко многим" ((1: *))

  • Описывает отношение, в котором есть много экземпляров значения в одном столбце, которые связаны только с одним уникальным соответствующим экземпляром в другом столбце.

  • Описывает направленность между таблицами фактов и измерения.

  • Это наиболее распространенный тип направленности, который используется по умолчанию в Power BI при автоматическом создании отношений.

Например, отношение "один ко многим" существует между таблицами CountryName и Territory — с одной уникальной страной может быть связано много регионов.

Отношение "один к одному" (1:1):

  • Описывает отношения, в которых только один экземпляр значения является общим для двух таблиц.

  • В обеих таблицах это должны быть уникальные значения.

  • Это отношение не рекомендуется, так как хранит избыточную информацию, и скорее всего это означает, что модель разработана неправильно. Рекомендуется объединять таблицы.

Например, отношение "один к одному" было бы в том случае, если бы продукты и идентификаторы продуктов находились в двух разных таблицах. Создание отношения "один к одному" является излишним, и эти две таблицы следует просто объединить.

Отношение "многие ко многим" (.):

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

  • Уникальные значения не требуются ни в одной таблице в отношении.

  • Это отношение не рекомендуется; отсутствие уникальных значений вносит неоднозначность, и ваши пользователи могут не знать, какой столбец значений к чему относится.

Например, на следующем рисунке показано отношение "многие ко многим" между таблицами Sales и Order в столбце OrderDate — с несколькими продажами может быть связано несколько заказов. Неоднозначность возникает потому, что в обеих таблицах может быть одинаковая дата заказа.

Направление кросс-фильтра

Данные могут фильтроваться с одной или с обеих сторон отношения.

Одно направление кросс-фильтра.

  • Для фильтрации данных может использоваться только одна таблица в отношении. Например, таблица 1 может быть отфильтрована таблицей 2, но таблица 2 не может быть отфильтрована таблицей 1.

    Совет

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

  • Для отношения "один ко многим" или "многие к одному" направление кросс-фильтра будет идти от стороны "один". Это означает, что фильтрация будет происходить в таблице, которая имеет много значений.

Два направления кросс-фильтра или двунаправленная кроссфильтрация.

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

  • Использование двунаправленной кроссфильтрации с отношениями "многие ко многим" может приводить к снижению производительности.

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

Кратность и направление кросс-фильтра

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

Для отношений "многие ко многим" можно выбрать фильтрацию в одном направлении или в обоих направлениях с помощью двунаправленной кроссфильтрации. Неоднозначность, связанная с двунаправленной кроссфильтрацией, при отношении "многие ко многим" усиливается, так как между разными таблицами будет существовать несколько путей. Если вы создаете меру, вычисление или фильтр, при фильтрации данных могут возникнуть неожиданные последствия, и в зависимости от того, какое отношение выбирает механизм Power BI при применении фильтра, конечный результат может отличаться. Это также может происходить и при двунаправленных отношениях. Поэтому вы должны быть очень внимательны при их использовании.

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

Создание отношений "многие ко многим"

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

Чтобы создать такое отношение, последовательно выберите Управление связями>Создать. В появившемся окне создайте связь между столбцами Customer ID в CustomerTable и AccountTable. Отношение устанавливается как "многие ко многим", а тип фильтра — в обоих направлениях. Вы сразу же получите предупреждение, что этот тип отношения следует использовать только в том случае, если предполагается, что ни один из столбцов не будет иметь уникальных значений, так как иначе вы можете получить непредвиденные результаты. Поскольку вы хотите выполнять фильтрацию в обоих направлениях, выберите двунаправленную кроссфильтрацию.

Нажмите кнопку ОК. Вы успешно создали отношение "многие ко многим".

Дополнительные сведения см. в разделе Отношение "многие ко многим" в Power BI.