Applicare l'impostazione Assume integrità referenziale in Power BI Desktop

Quando ci si connette a un'origine dati tramite DirectQuery, è possibile usare la selezione Assume integrità referenziale per consentire l'esecuzione di query più efficienti sull'origine dati. Questa funzionalità presenta alcuni requisiti dei dati sottostanti ed è disponibile solo quando si usa DirectQuery.

L'impostazione Presuppone integrità referenziale consente alle query sull'origine dati di usare istruzioni INNER JOIN anziché OUTER JOIN, migliorando così l'efficienza delle query.

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

Requisiti per l'uso dell'integrità referenziale

Questa impostazione è un'impostazione avanzata ed è abilitata solo quando ci si connette ai dati tramite DirectQuery. Per il corretto funzionamento dell'integrità referenziale, sono necessari i requisiti seguenti:

  • I dati nella colonna From della relazione non sono mai Null o vuoti
  • Per ogni valore nella colonna From è presente un valore corrispondente nella colonna A

In questo contesto, la colonna From è molti in una relazione uno-a-molti oppure è la colonna nella prima tabella in una relazione uno-a-uno.

Esempio di utilizzo di Presupporre l'integrità referenziale

Nell'esempio seguente viene illustrato il comportamento dell'integrità referenziale quando viene usato nelle connessioni dati. L'esempio si connette a un'origine dati che include una tabella Orders, una tabella Products e una tabella Depots.

  • Nell'immagine seguente che mostra la tabella Orders e la tabella Products , esiste l'integrità referenziale tra Orders[ProductID] e Products[ProductID]. La colonna [ProductID] nella tabella Orders non è mai Null e ogni valore viene visualizzato anche nella tabella Products . Di conseguenza, si supponga che l'integrità referenziale sia impostata per ottenere query più efficienti. L'uso di questa impostazione non modifica i valori visualizzati negli oggetti visivi.

    Screenshot of Orders table and Products table.

  • Nell'immagine successiva si noti che non esiste alcuna integrità referenziale tra Orders[DepotID] e Depots[DepotID], perché DepotID è Null per alcuni Ordini. Di conseguenza, si supponga che l'integrità referenziale non debba essere impostata.

    Screenshot of Orders table and Depots table.

  • Infine, non esiste alcuna integrità referenziale tra Orders[CustomerID] e Customers[CustID] nelle tabelle seguenti. CustomerID contiene alcuni valori, in questo caso CustX, che non esistono nella tabella Customers. Di conseguenza, si supponga che l'integrità referenziale non debba essere impostata.

    Screenshot of Orders table and Customers table.

Impostazione Presuppone integrità referenziale

Per abilitare questa funzionalità, selezionare Assume integrità referenziale come illustrato nell'immagine seguente.

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

Se selezionata, l'impostazione viene convalidata rispetto ai dati per assicurarsi che non siano presenti righe Null o non corrispondenti. Tuttavia, per i casi con un numero molto elevato di valori, la convalida non garantisce che non ci siano problemi di integrità referenziale.

Inoltre, la convalida viene eseguita al momento della modifica della relazione e non riflette eventuali modifiche successive ai dati.

Cosa accade se si imposta erroneamente l'integrità referenziale?

Se si imposta Assume integrità referenziale quando si verificano problemi di integrità referenziale nei dati, tale impostazione non genera errori. Tuttavia, comporta incoerenze evidenti nei dati. Ad esempio, per la relazione con la tabella Depots descritta di seguito, si ottiene quanto segue:

  • Un oggetto visivo che mostra il totale order Qty mostra un valore pari a 40
  • Un oggetto visivo che mostra il totale Order Qty by Depot City mostra un valore totale di soli 30, perché non include l'ID ordine 1, dove DepotID è Null.