Linee guida per le relazioni bidirezionali

Questo articolo è destinato a un modello di dati che usa Power BI Desktop. Fornisce indicazioni su quando creare relazioni tra modelli bidirezionali. Una relazione bidirezionale è uno che filtra in entrambe le direzioni.

Nota

Un'introduzione alle relazioni tra modelli non è descritta in questo articolo. Se non si ha familiarità con le relazioni, le relative proprietà o come configurarle, è consigliabile leggere prima l'articolo Relazioni tra modelli in Power BI Desktop .

È anche importante avere una conoscenza della progettazione dello schema star. Per altre informazioni, vedere Informazioni sullo schema star e sull'importanza di Power BI.

In genere, è consigliabile ridurre al minimo l'uso di relazioni bidirezionali. Possono influire negativamente sulle prestazioni delle query del modello e possibilmente offrire esperienze confuse per gli utenti del report.

Esistono tre scenari in cui il filtro bidirezionale può risolvere requisiti specifici:

Relazioni speciali tra modelli

Le relazioni bidirezionali svolgono un ruolo importante quando si creano i due tipi di relazione di modello speciali seguenti:

  • Uno-a-uno: tutte le relazioni uno-a-uno devono essere bidirezionali, non è possibile configurare in caso contrario. In genere, non è consigliabile creare questi tipi di relazioni. Per una discussione completa e progetti alternativi, vedere Linee guida per le relazioni uno-a-uno.
  • Molti-a-molti: quando si riguardano due tabelle di tipo dimensione, è necessaria una tabella di bridging. Per garantire la propagazione dei filtri nella tabella di bridging, è necessario un filtro bidirezionale. Per altre informazioni, vedere Linee guida per le relazioni molti-a-molti (Correlare dimensioni molti-a-molti).

Elementi del filtro dei dati "con dati"

Le relazioni bidirezionali possono recapitare filtri dei dati che limitano gli elementi alla posizione in cui esistono i dati. Se si ha familiarità con tabelle pivot e filtri dei dati di Excel, si tratta del comportamento predefinito durante l'origine dei dati da un modello semantico di Power BI (noto in precedenza come set di dati) o un modello di Analysis Services. Per spiegare cosa significa, considerare prima di tutto il diagramma del modello seguente.

Diagram showing a model containing three tables. The design is described in the following paragraph.

La prima tabella è denominata Customer e contiene tre colonne: Country-Region, Customer e CustomerCode. La seconda tabella è denominata Product e contiene tre colonne: Color, Product e SKU. La terza tabella è denominata Sales e contiene quattro colonne: CustomerCode, OrderDate, Quantity e SKU. Le tabelle Customer e Product sono tabelle di tipo dimensione e ognuna ha una relazione uno-a-molti con la tabella Sales . Ogni relazione filtra in una singola direzione.

Per descrivere il funzionamento del filtro bidirezionale, il diagramma del modello è stato modificato per visualizzare le righe della tabella. Tutti gli esempi in questo articolo sono basati su questi dati.

Nota

Non è possibile visualizzare righe di tabella nel diagramma del modello di Power BI Desktop. Questa operazione viene eseguita in questo articolo per supportare la discussione con esempi chiari.

Diagram showing that the model now reveals the table rows. The row details are described in the following paragraph.

I dettagli della riga per le tre tabelle sono descritti nell'elenco puntato seguente:

  • La tabella Customer ha due righe:
    • CustomerCode CUST-01, Customer Customer-1, Country-Region Stati Uniti
    • CustomerCode CUST-02, Customer Customer-2 , Country-Region Australia
  • La tabella Product include tre righe:
    • SKU CL-01, T-shirt prodotto , Colore verde
    • SKU CL-02, Product Jeans, Color Blue
    • SKU AC-01, Product Hat, Color Blue
  • La tabella Sales contiene tre righe:
    • OrderDate 1 gennaio 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
    • OrderDate 2 febbraio 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20
    • OrderDate 3 marzo 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30

Si consideri ora la pagina del report seguente.

Diagram showing the report page containing three visuals. The details are described in the following paragraph.

La pagina è costituita da due filtri dei dati e da un oggetto visivo scheda. Il primo filtro dei dati è per Country-Region e ha due elementi: Australia e Stati Uniti. Attualmente viene sezioni in base all'Australia. Il secondo filtro dei dati è per Product e ha tre elementi: Hat, Jeans e T-shirt. Nessun elemento selezionato (ovvero nessun prodotto viene filtrato). L'oggetto visivo scheda visualizza una quantità di 30.

Quando gli utenti del report riguardano l'Australia, è possibile limitare il filtro dei dati Product per visualizzare gli elementi in cui i dati sono correlati alle vendite australiane . È ciò che significa mostrare gli elementi del filtro dei dati "con i dati". È possibile ottenere questo comportamento configurando la relazione tra la tabella Product e Sales per filtrare in entrambe le direzioni.

Diagram showing a model that the relationship between the Product and Sales table is now bi-directional.

Il filtro dei dati Product elenca ora un singolo elemento: T-shirt. Questo articolo rappresenta l'unico prodotto venduto ai clienti australiani.

Diagram showing the report page containing three visuals with Product called out. The details are described in the following paragraph.

È innanzitutto consigliabile valutare attentamente se questa progettazione funziona per gli utenti del report. Alcuni utenti del report riscontrano confusione nell'esperienza. Non capiscono perché gli elementi del filtro dei dati vengono visualizzati o scompaiono dinamicamente quando interagiscono con altri filtri dei dati.

Se si decide di visualizzare gli elementi del filtro dei dati "con i dati", non è consigliabile configurare relazioni bidirezionali. Le relazioni bidirezionali richiedono un'elaborazione maggiore e quindi possono influire negativamente sulle prestazioni delle query, in particolare quando aumenta il numero di relazioni bidirezionali nel modello.

Esiste un modo migliore per ottenere lo stesso risultato: invece di usare filtri bidirezionali, è possibile applicare un filtro a livello visivo al filtro dei dati Product stesso.

Si consideri ora che la relazione tra la tabella Product e Sales non viene più filtrata in entrambe le direzioni. E la definizione di misura seguente è stata aggiunta alla tabella Sales .

Total Quantity = SUM(Sales[Quantity])

Per visualizzare gli elementi del filtro dei dati Product "con dati", è sufficiente filtrare in base alla misura Total Quantity usando la condizione "non è vuota".

Diagram showing that the Filters pane for the Product slicer now filters by

Analisi da dimensione a dimensione

Uno scenario diverso che prevede relazioni bidirezionali considera una tabella di tipo fatto come una tabella di bridging. In questo modo, supporta l'analisi dei dati della tabella di tipo dimensione all'interno del contesto di filtro di una tabella di tipo dimensione diversa.

Usando il modello di esempio in questo articolo, considerare come è possibile rispondere alle domande seguenti:

  • Quanti colori sono stati venduti ai clienti australiani?
  • Quanti paesi/aree geografiche hanno acquistato jeans?

Entrambe le domande possono essere risposte senza riepilogare i dati nella tabella dei fatti di bridging. Tuttavia, richiedono che i filtri vengano propagati da una tabella di tipo dimensione all'altra. Una volta propagati i filtri tramite la tabella di tipo fatto, è possibile ottenere il riepilogo delle colonne di tabella di tipo dimensione usando la funzione DAX DISTINCTCOUNT e possibilmente le funzioni DAX MIN e MAX .

Poiché la tabella di tipo fatto si comporta come una tabella di bridging, è possibile seguire le linee guida per le relazioni molti-a-molti per correlare due tabelle di tipo dimensione. Richiederà la configurazione di almeno una relazione per filtrare in entrambe le direzioni. Per altre informazioni, vedere Linee guida per le relazioni molti-a-molti (Correlare dimensioni molti-a-molti).

Tuttavia, come già descritto in questo articolo, questa progettazione genererà probabilmente un impatto negativo sulle prestazioni e le conseguenze dell'esperienza utente correlate agli elementi del filtro dei dati "con i dati". È quindi consigliabile attivare il filtro bidirezionale in una definizione di misura usando invece la funzione DAX CROSSFILTER . La funzione CROSSFILTER può essere usata per modificare le direzioni del filtro o persino disabilitare la relazione durante la valutazione di un'espressione.

Si consideri la definizione di misura seguente aggiunta alla tabella Sales . In questo esempio la relazione di modello tra le tabelle Customer e Sales è stata configurata per filtrare in una singola direzione.

Different Countries Sold =
CALCULATE(
    DISTINCTCOUNT(Customer[Country-Region]),
    CROSSFILTER(
        Customer[CustomerCode],
        Sales[CustomerCode],
        BOTH
    )
)

Durante la valutazione dell'espressione di misura Different Countries Sold , la relazione tra le tabelle Customer e Sales filtra in entrambe le direzioni.

L'oggetto visivo tabella seguente presenta statistiche per ogni prodotto venduto. La colonna Quantity è semplicemente la somma dei valori di quantità. La colonna Different Countries Sold (Paesi diversi venduti ) rappresenta il conteggio dei valori distinti di tutti i clienti che hanno acquistato il prodotto.

Diagram showing that two products are listed in a table visual. In the

Per altre informazioni relative a questo articolo, vedere le risorse seguenti: