Функция "Предполагать целостность данных" в Power BI DesktopAssume referential integrity settings in Power BI Desktop

При подключении к источнику данных с помощью DirectQuery можно установить флажок Предполагать целостность данных, что позволит создавать более эффективные запросы к источнику.When connecting to a data source using DirectQuery, you can use the Assume Referential Integrity selection to enable running more efficient queries against your data source. У этой функции есть некоторые требования к базовым данным, и она доступна только при использовании DirectQuery.This feature has a few requirements of the underlying data, and it is only available when using DirectQuery.

Если флажок Предполагать целостность данных установлен, в запросах к источнику данных используются инструкции INNER JOIN, а не OUTER JOIN. Они повышают эффективность запросов.Setting Assume referential integrity enables queries on the data source to use INNER JOIN statements rather than OUTER JOIN, which improves query efficiency.

Требования для использования функции "Предполагать целостность данных"Requirements for using Assume referential integrity

Это дополнительная функция. Она доступна только при подключении к данным с помощью DirectQuery.This is an advanced setting, and is only enabled when connecting to data using DirectQuery. Чтобы функция Предполагать целостность данных работала правильно, необходимо выполнить следующие условия:The following requirements are necessary for Assume referential integrity to work properly:

  • В настройках связи строки в столбце Из не пустые и не содержат значение Null.Data in the From column in the relationship is never Null or blank
  • У каждого значения в столбце Из есть соответствующее значение в столбце В.For each value in the From column, there is a corresponding value in the To column

В этом контексте столбец Из выступает в роли многих в связи типа один ко многим или же является столбцом первой таблицы в связи типа один к одному.In this context, the From column is the Many in a One-to-Many relationship, or it is the column in the first table in a One-to-One relationship.

Пример использования функции "Предполагать целостность данных"Example of using Assume referential integrity

В примере ниже показано, как работает функция Предполагать целостность данных, когда она используется в подключениях к данным.The following example demonstrates how Assume referential integrity behaves when used in data connections. Приложение подключается к источнику данных, который содержит таблицы Заказы, Товары и Склады.The example connects to a data source that includes an Orders table, a Products table, and a Depots table.

  1. На рисунке ниже показаны таблицы Заказы и Товары. Обратите внимание, что целостность данных существует между столбцами Заказы[КодТовара] и Товары[КодТовара].In the following image that shows the Orders table and the Products table, note that referential integrity exists between Orders[ProductID] and Products[ProductID]. В таблице Заказы в столбце [КодТовара] нет значений Null, и каждое значение из этого столбца повторяется в таблице Товары.The [ProductID] column in the Orders table is never Null, and every value also appears in the Products table. Таким образом, чтобы получить более эффективные запросы, нужно установить флажок Предполагать целостность данных (установка флажка не влияет на значения, отображаемые на визуализациях).As such, Assume Referential Integrity should be set to get more efficient queries (using this setting does not change the values shown in visuals).

  2. На рисунке ниже целостность данных между столбцами Заказы[КодСклада] и Склады[КодСклада] не существует, так как в столбце КодСклада для некоторых заказов указано значение Null.In the next image, notice that no referential integirty exists between Orders[DepotID] and Depots[DepotID], because the DepotID is Null for some Orders. Поэтому флажок Предполагать целостность данных устанавливать не нужно.As such, Assume Referential Integrity should not be set.

  3. На рисунке ниже целостность данных не существует между столбцами Заказы[КолКлиента] и Клиенты[КодКлиента]: в столбце КодКлиента есть значения (в данном случае — КлиентX), которых нет в таблице Клиенты.Finally, no referential integrity between Orders[CustomerID] and Customers[CustID] in the following tables; the CustomerID contains some values (in this case, CustX) that do not exist in the Customers table. Поэтому флажок Предполагать целостность данных устанавливать не нужно.As such, Assume Referential Integrity should not be set.

Установка флажка "Предполагать целостность данных"Setting Assume referential integrity

Чтобы активировать эту функцию, установите флажок Предполагать целостность данных, как показано на рисунке ниже.To enable this feature, select the checkbox next to Assume Referential Integrity as shown in the following image.

Когда флажок установлен, выполняется проверка на отсутствие значений Null и несовпадающих строк.When selected, the setting is validated against the data to ensure there are no Null or mismatched rows. Но если значений очень много, такая проверка не гарантирует отсутствие проблем с целостностью данных.However, for cases with a very large number of values, the validation is not a guarantee that there are no referential integrity issues.

Кроме того, проверка выполняется на этапе редактирования связей, и все будущие изменения в данных в ней не учитываются.In addition, the validation occurs at the time of editing the relationship, and does not reflect any subsequent changes to the data.

Что произойдет, если неправильно установить флажок "Предполагать целостность данных"What happens if you incorrectly set Assume referential integrity?

Если установить флажок Предполагать целостность данных при наличии проблем с их целостностью, ошибки возникать не будут.If you set Assume Referential Integrity when there are referential integrity issues in the data will not result in errors. Однако это приведет к очевидной несогласованности в данных.However, it will result in apparent inconsistencies in the data. Например, связь с таблицей Склады из примера выше приведет к следующему:For example, in the case of the relationship to the Depots table described above, it would result in the following:

  • визуализация общего количества заказов будет показывать значение 40;A visual showing the total Order Qty would show a value of 40
  • визуализация общего количества заказов по городам со складами будет показывать значение 30: КодЗаказа 1 не будет включен в расчет, так как КодСклада имеет значение Null.A visual showing the total Order Qty by Depot City would show a total value of only 30, because it would not include Order ID 1, where DepotID is Null.

Дальнейшие действияNext steps

Дополнительные сведения о DirectQuery.Learn more about DirectQuery

Дополнительные сведения о связях в Power BI.Get more information about Relationships in Power BI

Дополнительные сведения о представлении связей в Power BI Desktop.Learn more about Relationship View in Power BI Desktop.