Paramètres Intégrité référentielle supposée dans Power BI DesktopAssume referential integrity settings in Power BI Desktop

Lorsque vous vous connectez à une source de données à l’aide de DirectQuery, vous pouvez utiliser l’option Intégrité référentielle supposée pour exécuter des requêtes plus efficaces sur votre source de données.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. Cette fonctionnalité impose quelques exigences de données sous-jacentes, et n’est disponible qu’en utilisant DirectQuery.This feature has a few requirements of the underlying data, and it is only available when using DirectQuery.

Le paramètre Intégrité référentielle supposée permet aux requêtes sur la source de données d’utiliser des instructions de JOINTURE INTERNE plutôt que de JOINTURE EXTERNE, ce qui améliore l’efficacité des requêtes.Setting Assume referential integrity enables queries on the data source to use INNER JOIN statements rather than OUTER JOIN, which improves query efficiency.

Conditions d’utilisation du paramètre Intégrité référentielle supposéeRequirements for using Assume referential integrity

Il s’agit d’un paramètre avancé qui est activé uniquement en cas d’utilisation de DirectQuerypour la connexion aux données.This is an advanced setting, and is only enabled when connecting to data using DirectQuery. Pour que le paramètre Intégrité référentielle supposée fonctionne correctement, les conditions suivantes sont requises :The following requirements are necessary for Assume referential integrity to work properly:

  • Les données de la colonne De dans la relation ne peuvent jamais avoir de valeur Null ou videData in the From column in the relationship is never Null or blank
  • Pour chaque valeur dans la colonne De, une valeur correspondante doit figurer dans la colonne ÀFor each value in the From column, there is a corresponding value in the To column

Dans ce contexte, la colonne De est soit le côté Plusieurs dans une relation de Un-à-plusieurs, soit la colonne de la première table dans une relation de Un-à-un.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.

Exemple d’utilisation du paramètre Intégrité référentielle supposéeExample of using Assume referential integrity

L’exemple suivant montre comment le paramètre Intégrité référentielle supposée se comporte quand il est utilisé dans des connexions de données.The following example demonstrates how Assume referential integrity behaves when used in data connections. L’exemple se connecte à une source de données qui inclut une table Orders, une table Products et une table Depots.The example connects to a data source that includes an Orders table, a Products table, and a Depots table.

  1. Dans l’illustration suivante qui présente les tables Orders et Products, notez qu’il existe une intégrité référentielle entre Orders[ProductID] et Products[ProductID].In the following image that shows the Orders table and the Products table, note that referential integrity exists between Orders[ProductID] and Products[ProductID]. La colonne [ProductID] de la table Orders n’a jamais la valeur Null, et chaque valeur apparaît également dans la table Products.The [ProductID] column in the Orders table is never Null, and every value also appears in the Products table. Ainsi, le paramètre Intégrité référentielle supposée devrait être défini pour obtenir des requêtes plus efficaces (l’utilisation de ce paramètre ne modifie pas les valeurs affichées dans les éléments visuels).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. Dans l’image suivante, vous pouvez remarquer qu’il n’existe pas d’intégrité référentielle entre [DepotID] et Depots[DepotID], car la valeur de DepotID est Null pour certaines entrées de la table Orders.In the next image, notice that no referential integirty exists between Orders[DepotID] and Depots[DepotID], because the DepotID is Null for some Orders. Par conséquent, le paramètre Intégrité référentielle supposée ne devrait pas être défini.As such, Assume Referential Integrity should not be set.

  3. Enfin, il n’existe aucune intégrité référentielle entre [CustomerID] et Customers[CustID] dans les tables suivantes. La colonne CustomerID contient des valeurs (en l’occurrence, CustX) qui n’existent pas dans la table Customers.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. Par conséquent, le paramètre Intégrité référentielle supposée ne devrait pas être défini.As such, Assume Referential Integrity should not be set.

Définition du paramètre Intégrité référentielle supposéeSetting Assume referential integrity

Pour activer cette fonctionnalité, activez la case à cocher en regard du paramètre Intégrité référentielle supposée, comme illustré dans l’image suivante.To enable this feature, select the checkbox next to Assume Referential Integrity as shown in the following image.

Une fois sélectionné, le paramètre est validé par rapport aux données pour s’assurer qu’il n’y a pas de valeur Null ou de lignes incohérentes.When selected, the setting is validated against the data to ensure there are no Null or mismatched rows. Toutefois, lorsque le nombre de valeurs est très important, la validation ne garantit pas l’absence de problème d’intégrité référentielle.However, for cases with a very large number of values, the validation is not a guarantee that there are no referential integrity issues.

De plus, la validation se produisant au moment de l’édition de la relation, elle ne reflète pas d’éventuelles modifications ultérieures des données.In addition, the validation occurs at the time of editing the relationship, and does not reflect any subsequent changes to the data.

Que se passe-t-il si vous définissez erronément le paramètre Intégrité référentielle supposée ?What happens if you incorrectly set Assume referential integrity?

Définir le paramètre Intégrité référentielle supposée quand il existe des problèmes d’intégrité référentielle dans les données ne génère pas d’erreurs.If you set Assume Referential Integrity when there are referential integrity issues in the data will not result in errors. En revanche, cela entraîne des incohérences apparentes des données.However, it will result in apparent inconsistencies in the data. Par exemple, dans le cas de la relation à la table Depots décrite ci-dessus, il en résulterait ce qui suit :For example, in the case of the relationship to the Depots table described above, it would result in the following:

  • Un élément visuel indiquant le total Order Qty indiquerait une valeur de 40A visual showing the total Order Qty would show a value of 40
  • Un élément visuel indiquant le total Order Qty by Depot City indiquerait une valeur totale de seulement 30, car il n’inclurait pas l’Order ID 1, où DepotID a la valeur 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.

Étapes suivantesNext steps

En savoir plus sur DirectQueryLearn more about DirectQuery

En savoir plus sur les Relations dans Power BIGet more information about Relationships in Power BI

En savoir plus sur la Vue Relation dans Power BI Desktop.Learn more about Relationship View in Power BI Desktop.