Considerare le impostazioni di integrità referenziale in Power BI DesktopAssume referential integrity settings in Power BI Desktop

Quando ci si connette a un'origine dati con DirectQuery, è possibile usare la selezione Considera integrità referenziale per consentire un'esecuzione ottimizzata delle query sull'origine dati.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. Questa funzionalità presenta alcuni requisiti per i dati sottostanti ed è disponibile solo quando si usa DirectQuery.This feature has a few requirements of the underlying data, and it is only available when using DirectQuery.

Quando si imposta Considera integrità referenziale, viene abilitato l'uso di istruzioni INNER JOIN, invece di OUTER JOIN, per le query sull'origine dati, che migliora l'efficacia delle query.Setting Assume referential integrity enables queries on the data source to use INNER JOIN statements rather than OUTER JOIN, which improves query efficiency.

Requisiti per l'utilizzo di Considera integrità referenzialeRequirements for using Assume referential integrity

Questa impostazione avanzata viene abilitata solo quando ci si connette ai dati con DirectQuery.This is an advanced setting, and is only enabled when connecting to data using DirectQuery. I requisiti seguenti sono necessari per il corretto funzionamento di Considera integrità referenziale:The following requirements are necessary for Assume referential integrity to work properly:

  • I dati nella colonna Da della relazione non sono mai Null o vuotiData in the From column in the relationship is never Null or blank
  • Per ogni valore nella colonna Da è presente un valore corrispondente nella colonna AFor each value in the From column, there is a corresponding value in the To column

In questo contesto la colonna Da corrisponde a Molti in una relazione Uno-a-molti oppure alla colonna della prima tabella in una relazione Uno-a-uno.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.

Esempio di utilizzo di Considera integrità referenzialeExample of using Assume referential integrity

L'esempio seguente mostra il comportamento di Considera integrità referenziale quando viene usato nelle connessioni dati.The following example demonstrates how Assume referential integrity behaves when used in data connections. L'esempio mostra una connessione a un'origine dati che include una tabella Orders, una tabella Products e una tabella Depots.The example connects to a data source that includes an Orders table, a Products table, and a Depots table.

  1. Nella figura seguente che mostra la tabella Orders e la tabella Products esiste integrità referenziale tra Orders[ProductID] e 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 colonna [ProductID] nella tabella Orders non è mai Null e tutti i valori vengono anche visualizzati nella tabella Products.The [ProductID] column in the Orders table is never Null, and every value also appears in the Products table. Di conseguenza, Considera integrità referenziale deve essere impostato per ottenere query più efficienti. Questa impostazione non modifica i valori visualizzati negli oggetti visivi.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. Nella figura seguente non esiste integrità referenziale tra Orders[DepotID] e Depots[DepotID], perché Depots[DepotID] è Null per alcuni 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. Di conseguenza, Considera integrità referenziale non deve essere impostato.As such, Assume Referential Integrity should not be set.

  3. Infine, non esiste integrità referenziale tra Orders[CustomerID] e Customers[CustomerID] nelle tabelle seguenti. CustomerID contiene alcuni valori, in questo caso, CustX, che non esistono nella tabella 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. Di conseguenza, Considera integrità referenziale non deve essere impostato.As such, Assume Referential Integrity should not be set.

Impostazione di Considera integrità referenzialeSetting Assume referential integrity

Per abilitare questa funzionalità, selezionare la casella di controllo accanto a Considera integrità referenziale come mostrato nella figura seguente.To enable this feature, select the checkbox next to Assume Referential Integrity as shown in the following image.

Se selezionata, l'impostazione viene convalidata in base ai dati per assicurare che non ci siano righe Null o non corrispondenti.When selected, the setting is validated against the data to ensure there are no Null or mismatched rows. Tuttavia, per i casi con un numero molto elevato di valori, la convalida non garantisce l'assenza di problemi di integrità referenziale.However, for cases with a very large number of values, the validation is not a guarantee that there are no referential integrity issues.

Inoltre, la convalida viene eseguita quando si modifica la relazione e non riflette eventuali modifiche successive ai dati.In addition, the validation occurs at the time of editing the relationship, and does not reflect any subsequent changes to the data.

Cosa accade se si imposta Considera integrità referenziale in modo errato?What happens if you incorrectly set Assume referential integrity?

Se i dati presentano problemi di integrità referenziale e si imposta Considera integrità referenziale, non si verificheranno errori.If you set Assume Referential Integrity when there are referential integrity issues in the data will not result in errors. Tuttavia, i dati mostreranno apparenti incoerenze.However, it will result in apparent inconsistencies in the data. Ad esempio, nel caso della relazione con la tabella Depots descritta in precedenza, il risultato sarà il seguente:For example, in the case of the relationship to the Depots table described above, it would result in the following:

  • Un oggetto visivo che mostra il totale di Order Qty avrebbe un valore pari a 40A visual showing the total Order Qty would show a value of 40
  • Un oggetto visivo che mostra il totale di Order Qty by Depot City avrebbe un valore totale di appena 30 perché non include l'ID ordine 1, in cui DepotID è 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.

Passaggi successiviNext steps

Altre informazioni su DirectQueryLearn more about DirectQuery

Altre informazioni sulle relazioni in Power BIGet more information about Relationships in Power BI

Altre informazioni su Visualizzazione delle relazioni in Power BI Desktop.Learn more about Relationship View in Power BI Desktop.