Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:
SQL Server Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
В табличных моделях связь — это соединение между двумя таблицами данных. Связь устанавливает, как данные в двух таблицах должны быть сопоставлены. Например, таблица "Клиенты" и таблица "Заказы" могут быть связаны для отображения имени клиента, связанного с каждым заказом.
При импорте из того же источника данных связи, которые уже существуют в таблицах (в источнике данных), которые вы решили импортировать, будут повторно созданы в модели. Вы можете просматривать связи, обнаруженные и повторно созданные автоматически с помощью конструктора моделей в представлении диаграммы или с помощью диалогового окна "Управление связями". Вы также можете создать новые связи между таблицами вручную с помощью конструктора моделей в представлении диаграммы или с помощью диалогового окна "Создание связей" или "Управление связями".
После определения связей между таблицами автоматически во время импорта или создания вручную можно будет фильтровать данные с помощью связанных столбцов и поиска значений в связанных таблицах.
Подсказка
Если модель содержит много связей, представление диаграммы поможет лучше визуализировать и создать новые связи между таблицами.
Преимущества
Связь — это соединение между двумя таблицами данных на основе одного или нескольких столбцов в каждой таблице. Чтобы узнать, почему отношения полезны, представьте, что вы отслеживаете данные о заказах клиентов в вашем бизнесе. Вы можете отслеживать все данные в одной таблице, которая имеет структуру, как показано ниже:
| Идентификатор клиента | Имя | Отправить по электронной почте | Скидка | Идентификатор заказа | Дата заказа | Продукт | Количество |
|---|---|---|---|---|---|---|---|
| 1 | Эштон | chris.ashton@contoso.com | .05 | 256 | 2010-01-07 | Compact Digital | 11 |
| 1 | Эштон | chris.ashton@contoso.com | ,05 | 255 | 2010-01-03 | Камера SLR | 15 |
| 2 | Яворский | michal.jaworski@contoso.com | .10 | 254 | 2010-01-03 | Бюджетный создатель фильмов | двадцать семь |
Этот подход может работать, но он включает хранение большого количества избыточных данных, таких как адрес электронной почты клиента для каждого заказа. Хранение данных недорого, но необходимо убедиться, что вы обновляете каждую строку для данного клиента, если изменяется адрес электронной почты. Одним из решений этой проблемы является разделение данных на несколько таблиц и определение связей между этими таблицами. Это подход, используемый в реляционных базах данных , таких как SQL Server. Например, база данных, импортируемая в модель, может представлять данные заказа с помощью трех связанных таблиц:
Customers
| [CustomerID] | Имя | Адрес электронной почты |
|---|---|---|
| 1 | Эштон | chris.ashton@contoso.com |
| 2 | Яворский | michal.jaworski@contoso.com |
Скидки для клиентов
| [CustomerID] | Скидка |
|---|---|
| 1 | 0,05 |
| 2 | .10 |
Заказы
| [ИдентификаторКлиента] | Идентификатор заказа | Дата заказа | Продукт | Количество |
|---|---|---|---|---|
| 1 | 256 | 2010-01-07 | Compact Digital | 11 |
| 1 | 255 | 2010-01-03 | Камера SLR | 15 |
| 2 | 254 | 2010-01-03 | Бюджетный видеоредактор | двадцать семь |
При импорте этих таблиц из одной базы данных импорт может обнаруживать связи между таблицами на основе столбцов, которые находятся в [скобках], и могут воспроизводить эти связи в конструкторе моделей. Дополнительные сведения см. в разделе "Автоматическое обнаружение и вывод связей" в этой статье. При импорте таблиц из нескольких источников можно вручную создать связи, как описано в разделе "Создание связи между двумя таблицами".
Столбцы и ключи
Связи основаны на столбцах в каждой таблице, содержащей одни и те же данные. Например, таблицы "Клиенты и заказы" могут быть связаны друг с другом, так как оба они содержат столбец, в котором хранится идентификатор клиента. В примере имена столбцов одинаковы, но это не обязательно. Один может быть CustomerID, а второй - CustomerNumber, если все строки в таблице "Заказы" содержат идентификатор, который также хранится в таблице "Клиенты".
В реляционной базе данных существует несколько типов ключей, которые обычно являются только столбцами со специальными свойствами. Следующие четыре типа ключей можно использовать в реляционных базах данных:
Первичный ключ: уникально идентифицирует строку в таблице, например CustomerID в таблице Customers.
Альтернативный ключ (или ключ кандидата): столбец, отличный от первичного ключа, который является уникальным. Например, таблица "Сотрудники" может хранить идентификатор сотрудника и номер социального страхования, оба из которых являются уникальными.
Внешний ключ: столбец, ссылающийся на уникальный столбец в другой таблице, например CustomerID в таблице Orders, которая ссылается на CustomerID в таблице Customers.
Составной ключ: ключ, состоящий из нескольких столбцов. Составные ключи не поддерживаются в табличных моделях. Дополнительные сведения см. в разделе "Составные ключи и столбцы подстановки" в этой статье.
В табличных моделях первичный ключ или альтернативный ключ называются соответствующим столбцом подстановки или просто столбцом подстановки. Если в таблице есть и первичный, и альтернативный ключ, можно использовать любой из них в качестве столбца поиска. Внешний ключ называется исходным столбцом или просто столбцом. В нашем примере связь будет определена между CustomerID в таблице "Заказы" (столбец) и CustomerID (столбец подстановки) в таблице "Клиенты". При импорте данных из реляционной базы данных по умолчанию конструктор моделей выбирает внешний ключ из одной таблицы и соответствующий первичный ключ из другой таблицы. Однако для столбца подстановки можно использовать любой столбец, в котором есть уникальные значения.
Типы связей
Связь между клиентами и заказами — это связь "один ко многим". Каждый клиент может иметь несколько заказов, но заказ не может иметь нескольких клиентов. Другие типы связей — "один к одному" и "многие ко многим". Таблица CustomerDiscounts, которая определяет одну ставку скидки для каждого клиента, находится в отношениях "один к одному" с таблицей "Клиенты". Примером отношения "многие ко многим" является прямая связь между продуктами и клиентами, при которой клиент может приобрести множество продуктов, а один и тот же продукт может быть приобретён многими клиентами. Конструктор моделей не поддерживает взаимосвязи "многие ко многим" в пользовательском интерфейсе. Дополнительные сведения см. в разделе «Связи "многие ко многим"» в этой статье.
В следующей таблице показаны связи между тремя таблицами:
| Relationship | Тип | Столбец подстановки | колонна |
|---|---|---|---|
| Customers-СкидкиКлиентам | один к одному | Customers.CustomerID | Программа скидок клиентов (CustomerDiscounts.CustomerID) |
| Клиенты-Заказы | one-to-many | Customers.CustomerID | Orders.CustomerID |
Связи и производительность
После создания любой связи конструктор моделей обычно должен пересчитывать все формулы, использующие столбцы из таблиц в только что созданной связи. Обработка может занять некоторое время в зависимости от объема данных и сложности связей.
Требования к связям
Конструктор моделей имеет несколько требований, которые должны соблюдаться при создании связей:
Одна активная связь между таблицами
Несколько связей могут привести к неоднозначным зависимостям между таблицами. Чтобы создать точные вычисления, вам потребуется один путь из одной таблицы к следующей. Таким образом, между каждой парой таблиц может быть только одна активная связь. Например, в AdventureWorks DW 2012 таблица DimDate содержит столбец DateKey, связанный с тремя различными столбцами в таблице, FactInternetSales: OrderDate, DueDate и ShipDate. При попытке импорта этих таблиц первая связь создается успешно, но при последующих отношениях, включающих один и тот же столбец, будет получена следующая ошибка:
* Связь: таблица[столбец 1]-> таблица[столбец 2] - Состояние: ошибка: причина: связь между таблицами <1> и <таблицей 2> не может быть создана. Между двумя таблицами может существовать только одна прямая или непрямая связь.
Если у вас есть две таблицы и между ними несколько связей, необходимо импортировать несколько копий таблицы, которая содержит столбец подстановки, и создать по одной связи между каждой парой таблиц.
Между таблицами может быть много неактивных связей. Путь к использованию между таблицами указывается клиентом отчетов во время запроса.
Одна связь для каждого исходного столбца
Исходный столбец не может участвовать в нескольких связях. Если вы уже использовали столбец в качестве исходного столбца в одном отношении, но хотите подключить этот столбец к другому связанному подстановочному столбцу в другой таблице, можно создать копию столбца и использовать эту копию для нового отношения.
Легко создать копию столбца с одинаковыми значениями с помощью формулы DAX в вычисляемом столбце. Дополнительные сведения см. в разделе "Создание вычисляемого столбца".
Уникальный идентификатор для каждой таблицы
Каждая таблица должна иметь один столбец, который однозначно идентифицирует каждую строку в этой таблице. Этот столбец часто называется первичным ключом.
Уникальные столбцы поиска
Значения данных в столбце подстановки должны быть уникальными. Другими словами, столбец не может содержать дубликаты. В табличных моделях значение null и пустые строки эквивалентны пустому значению, которое является отдельным значением данных. Это означает, что в столбце подстановки невозможно иметь несколько значений NULL.
Совместимые типы данных
Типы данных в исходном столбце и столбце подстановки должны быть совместимыми. Дополнительные сведения о типах данных см. в разделе "Поддерживаемые типы данных".
Составные ключи и столбцы подстановки
Нельзя использовать составные ключи в табличной модели; Всегда должен быть один столбец, который однозначно идентифицирует каждую строку в таблице. Если вы пытаетесь импортировать таблицы, имеющие существующие связи на основе составного ключа, импорт будет игнорировать эту связь, так как она не может быть создана в табличной модели.
Если вы хотите создать связь между двумя таблицами в конструкторе моделей и существует несколько столбцов, определяющих первичные и внешние ключи, необходимо объединить значения, чтобы создать один ключевой столбец перед созданием связи. Это можно сделать перед импортом данных или сделать это в конструкторе моделей, создав вычисляемый столбец.
Отношения «многие ко многим»
Табличные модели уровня совместимости 1500 и выше, развернутые в Azure Analysis Services, SQL Server 2019 и более поздних версиях Analysis Services, а также Power BI Premium, поддерживают связи "многие ко многим".
Связи "многие ко многим" — это такие связи между таблицами, в которых оба столбца не уникальны. Связь может быть определена между измерением и таблицей фактов с степенью детализации выше ключевого столбца измерения. Это позволяет не нормализовать таблицы измерений и улучшить взаимодействие с пользователем, так как результирующая модель имеет меньшее количество таблиц с логически сгруппированных столбцов.
Создавайте связи "многие ко многим" с помощью Visual Studio 2019, используя проекты Analysis Services, API табличной объектной модели (TOM), язык сценариев табличных моделей (TMSL) и средство Tabular Editor с открытым исходным кодом.
Табличные модели с уровнем совместимости 1400 и ниже не поддерживают связи "многие ко многим", и вы не можете добавлять таблицы соединения в конструктор моделей. Однако функции DAX можно использовать для моделирования связей "многие ко многим". Вы также можете попробовать настроить двунаправленный кросс-фильтр, чтобы узнать, достигается ли она той же цели. Иногда требование связи "многие ко многим" может быть удовлетворено через перекрестные фильтры, которые сохраняют контекст фильтра в нескольких отношениях таблицы. Дополнительные сведения см. в двухнаправленных перекрестных фильтрах в отношении табличных моделей.
Самосоединения и циклы
Самосоединения не допускаются в таблицах моделей данных. Самосоединение — это рекурсивная связь между таблицей и самой собой. Самосоединения часто используются для создания иерархий родительско-дочерних элементов. Например, можно присоединить таблицу Employees к себе, чтобы создать иерархию, показывющую цепочку управления в бизнесе.
Конструктор моделей не позволяет создавать циклы между связями в модели. Другими словами, запрещается следующий набор связей.
Таблица 1, столбец а до Таблица 2, столбец f
Таблица 2, столбец F до Таблица 3, столбец N
Таблица 3, столбец n в таблицу 1, столбец a
При попытке создать связь, которая приведет к созданию цикла, создается ошибка.
Инференция связей
В некоторых случаях отношения между таблицами автоматически связываются. Например, если вы создаете связь между первым двумя наборами таблиц, перечисленными ниже, предполагается, что связь существует и между другими двумя таблицами, и связь устанавливается автоматически.
Продукты и категория — созданные вручную
Категория и подкатегория, созданные вручную
Продукты и подкатегория — связь выводится
Для автоматической цепочки связей отношения должны идти в одном направлении, как показано выше. Если изначально отношения были установлены между, например, "Продажи" и "Продукты", а также "Продажи" и "Клиенты", такая связь не подразумевается. Это связано с тем, что связь между продуктами и клиентами — это связь "многие ко многим".
Обнаружение связей при импорте данных
При импорте из реляционной таблицы источника данных существующие связи обнаруживаются между таблицами на основе данных исходной схемы. Если связанные таблицы импортируются, эти связи будут реплицированы в модели.
Создание связей вручную
Хотя большинство связей между таблицами в одном реляционном источнике данных обнаруживаются автоматически и создаются в табличной модели, существует также множество экземпляров, в которых необходимо вручную создавать связи между таблицами моделей.
Если модель содержит данные из нескольких источников, скорее всего, вам придется вручную создавать связи. Например, вы можете импортировать таблицы Customer, CustomerDiscounts и Orders из реляционного источника данных. Связи между этими таблицами в источнике автоматически создаются в модели. Затем вы можете добавить другую таблицу из другого источника, например импортируйте данные региона из таблицы Geography в книге Microsoft Excel. Затем можно вручную создать связь между столбцом в таблице Customers и столбцом в таблице Geography.
Чтобы вручную создать связи в табличной модели, можно использовать конструктор моделей в представлении диаграммы или с помощью диалогового окна "Управление связями". В представлении схемы отображаются таблицы с связями между ними в графическом формате. Можно щелкнуть столбец в одной таблице и перетащить курсор в другую таблицу, чтобы легко создать связь в правильном порядке между таблицами. В диалоговом окне "Управление связями" отображаются связи между таблицами в простом формате таблицы. Сведения о том, как вручную создавать связи, см. в статье "Создание связи между двумя таблицами".
Повторяющиеся значения и другие ошибки
Если выбрать столбец, который не может использоваться в связи, рядом со столбцом появится красный X. Вы можете приостановить курсор на значок ошибки, чтобы просмотреть сообщение, которое предоставляет дополнительные сведения о проблеме. Проблемы, которые могут сделать невозможным создать связь между выбранными столбцами, включают в себя следующее:
| Проблема или сообщение | Резолюция |
|---|---|
| Невозможно создать связь, так как оба выбранных столбца содержат повторяющиеся значения. | Чтобы создать допустимую связь, по крайней мере один столбец выбранной пары должен содержать только уникальные значения. Можно отредактировать столбцы, чтобы удалить дубликаты, или изменить порядок столбцов так, чтобы столбец с уникальными значениями использовался в качестве связанного столбца поиска. |
| Столбец содержит значение NULL или пустое значение. | Столбцы данных нельзя объединить друг с другом по значению NULL. Для каждой строки должно быть значение в обоих столбцах, используемых в связи. |
См. также
| Article | Description |
|---|---|
| Создание связи между двумя таблицами | Описывает, как вручную создать связь между двумя таблицами. |
| Удаление связей | Описывает, как удалить связь и последствия удаления связей. |
| Двунаправленные перекрестные фильтры | Описывает двустороннюю перекрестную фильтрацию связанных таблиц. Контекст фильтра одного отношения между таблицами можно использовать при выполнении запроса по другому отношению таблицы, если таблицы взаимосвязаны и определены двунаправленные перекрестные фильтры. |