Применение параметра "Предполагаемая целостность" в Power BI Desktop

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

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

Screenshot of an Edit Relationship dialog to select Assume Referential Integrity.

Требования к использованию референциальной целостности

Этот параметр является дополнительным параметром и включен только при подключении к данным с помощью DirectQuery. Для правильной работы референциальной целостности необходимы следующие требования:

  • Данные в столбце From в связи никогда не являются пустыми или пустыми
  • Для каждого значения в столбце From в столбце Есть соответствующее значение в столбце "To"

В этом контексте столбец From — это "Многие " в связи "Один ко многим ", или это столбец в первой таблице в связи "Один к одному ".

Пример использования функции "Предположим, что целостность ссылок"

В следующем примере показано, как предполагается, что целостность ссылок ведет себя при использовании в подключениях к данным. Пример подключается к источнику данных, который включает таблицу Orders , таблицу Products и таблицу Depots .

  • На следующем рисунке показана таблица "Заказы" и таблица "Продукты", целостность ссылок существует между Orders[ProductID] и Products[ProductID]. Столбец [ProductID] в таблице Orders никогда не имеет значения NULL, а каждое значение также отображается в таблице Products . Таким образом, предположим, что для получения более эффективных запросов следует задать ссылочная целостность. Использование этого параметра не изменяет значения, отображаемые в визуальных элементах.

    Screenshot of Orders table and Products table.

  • На следующем изображении обратите внимание, что не существует ссылочной целостности между Orders[DepotID] и Depots[DepotID], так как depotID имеет значение NULL для некоторых заказов. Таким образом, предположим, что целостность ссылок не должна быть задана.

    Screenshot of Orders table and Depots table.

  • Наконец, не существует ссылочной целостности между Orders[CustomerID] и Customer[CustID] в следующих таблицах. CustomerID содержит некоторые значения, в данном случае CustX, которые не существуют в таблице Customers. Таким образом, предположим, что целостность ссылок не должна быть задана.

    Screenshot of Orders table and Customers table.

Настройка ссылочной целостности

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

Screenshot of an Edit Relationship dialog that allows you to select Assume Referential Integrity.

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

Кроме того, проверка выполняется во время редактирования связи и не отражает последующие изменения данных.

Что произойдет, если вы неправильно задали ссылку на целостность?

Если при наличии проблем с целостностью ссылок в данных задана референтная целостность, этот параметр не приводит к ошибкам. Однако это приводит к явным несоответствиям в данных. Например, для связи с таблицей depots , описанной здесь, это приведет к следующему:

  • Визуальный элемент, показывающий общий показатель качества заказа, будет отображать значение 40
  • Визуальный элемент, показывающий общий номер заказа от Depot City , будет отображать общее значение только 30, так как он не будет содержать идентификатор заказа 1, где DepotID имеет значение NULL.