Applicare l'impostazione Considera 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 per i dati sottostanti ed è disponibile solo quando si usa DirectQuery.

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

Screenshot di una finestra di dialogo Modifica relazione per la selezione di Considera integrità referenziale.

Requisiti per l'uso di Presupporre l'integrità referenziale

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

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

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.

Esempio di utilizzo di Considera integrità referenziale

Nell'esempio seguente viene illustrato come si comporta l'integrità referenziale quando viene usata nelle connessioni dati. L'esempio mostra una connessione a un'origine dati che include una tabella Orders, una tabella Products e una tabella Depots.

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

    Screenshot delle tabelle Orders e Products.

  • Nella figura seguente non esiste integrità referenziale tra Orders[DepotID] e Depots[DepotID], perché DepotID è Null per alcuni elementi Orders. Di conseguenza, si supponga che l'integrità referenziale non debba essere impostata.

    Screenshot delle tabelle Orders e Depots.

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

    Screenshot delle tabelle Orders e Customers.

Impostazione Presupporre l'integrità referenziale

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

Screenshot di una finestra di dialogo Modifica relazione che consente di selezionare Considera integrità referenziale.

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

Inoltre, la convalida viene eseguita quando si modifica la relazione e non riflette eventuali modifiche successive ai dati.

Cosa accade se si imposta erroneamente Assume integrità referenziale?

Se si imposta Assume integrità referenziale quando si verificano problemi di integrità referenziale nei dati, tale impostazione non genera errori. Tuttavia, i dati mostrano apparenti incoerenze. 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 di Order Qty by Depot City avrebbe un valore totale di appena 30 perché non include l'ID ordine 1, in cui DepotID è Null.