Condividi tramite


Linee guida per la relazione bidirezionale

Questo articolo è rivolto a un modellatore di dati che lavora con Power BI Desktop. Offre indicazioni su quando creare relazioni di modello bidirezionali. Una relazione bidirezionale è una relazione che filtra in entrambe le direzioni.

Nota

Questo articolo non fornisce un'introduzione alle relazioni nei modelli. Se non si ha familiarità con le relazioni, le relative proprietà o le modalità di configurazione, è consigliabile leggere per prima cosa l'articolo Relazioni nei modelli in Power BI Desktop.

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

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

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

Relazioni speciali dei modelli

Le relazioni bidirezionali svolgono un ruolo importante quando si creano i due tipi seguenti di relazione speciale dei modelli:

  • Uno-a-uno: tutte le relazioni uno-a-uno devono essere bidirezionali, non è possibile configurarle diversamente. In genere, non è consigliabile creare questi tipi di relazioni. Per una discussione approfondita e per i modelli di progettazione alternativi, consultare le linee guida sulle relazioni uno a uno .
  • Molti-a-molti: quando si mettono in relazione due tabelle di dimensioni , è necessaria una tabella di collegamento . È necessario un filtro bidirezionale per garantire la propagazione dei filtri nella tabella di bridging. Per altre informazioni, vedere linee guida per le relazioni di tipo molti-a-molti.

Opzioni filtro "con dati"

Le relazioni bidirezionali possono fornire slicer che limitano le opzioni ai punti in cui esistono i dati. Se si ha familiarità con le Tabelle Pivot di Excel e gli slicer, si tratta del comportamento predefinito quando i dati vengono recuperati da un modello semantico di Power BI o da un modello di Analysis Services. Per spiegare cosa significa, considerate innanzitutto il seguente diagramma del modello.

Diagramma che mostra un modello contenente tre tabelle. La progettazione è descritta nel paragrafo seguente.

La prima tabella è denominata Customer. e contiene tre colonne: Country-Region, Customere CustomerCode. La seconda tabella è denominata Producte contiene tre colonne: Color, Producte SKU. La terza tabella è denominata Salese contiene quattro colonne: CustomerCode, OrderDate, Quantitye SKU. Le tabelle Customer e Product sono tabelle dimensionali e ciascuna ha una relazione uno-a-molti con la tabella Sales. Ogni relazione filtra in un'unica direzione.

Per semplificare la descrizione del funzionamento del filtro bidirezionale, il diagramma del modello è stato modificato in modo da visualizzare le righe delle tabelle. Tutti gli esempi in questo articolo sono basati su questi dati.

Diagramma che mostra il modello con le righe di tabella visualizzate. Nel paragrafo riportato di seguito sono descritti i dettagli delle righe.

I dettagli delle righe per le tre tabelle sono descritti nell'elenco puntato seguente:

  • La tabella Customer ha due righe:
    • CustomerCode CUST-01, CustomerCustomer-1, Country-RegionStati Uniti
    • CustomerCode CUST-02, CustomerCustomer-2, Country-RegionAustralia
  • La tabella Product ha tre righe:
    • SKU CL-01, ProductT-shirt, ColorVerde
    • SKU CL-02, ProductJeans, ColorBlue
    • SKU AC-01, ProductCappello, ColorBlu
  • La tabella Sales ha tre righe:
    • OrderDate 1 gennaio 2019, CustomerCodeCUST-01, SKUCL-01, Quantity10
    • OrderDate 2 febbraio 2019, CustomerCodeCUST-01, SKUCL-02, Quantity20
    • OrderDate 3 marzo 2019, CustomerCodeCUST-02, SKUCL-01, Quantity30

Si consideri ora la pagina di report seguente.

Diagramma che mostra la pagina del report contenente tre oggetti visivi. Nel paragrafo riportato di seguito sono descritti i dettagli relativi.

La pagina è costituita da due filtri dei dati e da un oggetto visivo della scheda. Il primo filtro dei dati si basa sul campo Country-Region e ha due opzioni: Australia e Stati Uniti. Attualmente esegue il filtro dei dati per Australia. Il secondo filtro dei dati si basa sul campo Product e ha tre opzioni: Cappello, Jeans e Maglietta. Non è selezionato alcun elemento, ovvero i prodotti non vengono filtrati. L'oggetto visivo della scheda visualizza una quantità pari a 30.

Quando gli utenti del report segmentano per Australia, è possibile limitare il filtro del prodotto per visualizzare le opzioni dove i dati sono collegati alle vendite australiane. Questo è ciò che significa mostrare le opzioni del filtro "con i dati". È possibile ottenere questo comportamento impostando la relazione tra le tabelle Product e Sales per filtrare in entrambe le direzioni.

Diagramma che mostra un modello che la relazione tra le tabelle Product e Sales è ora bidirezionale.

Il filtro dei dati del prodotto elenca ora un'unica opzione: T-shirt. Questa opzione rappresenta l'unico prodotto venduto ai clienti australiani.

Diagramma che illustra la pagina del report contenente tre oggetti visivi con la parola Product evidenziata. Nel paragrafo riportato di seguito sono descritti i dettagli relativi.

Prima di tutto, è consigliabile valutare attentamente se questa progettazione funziona per gli utenti del report. Alcuni utenti del report riscontrano confusione perché non capiscono perché le opzioni del filtro dei dati vengono visualizzate o scompaiono in modo dinamico quando interagiscono con altri filtri dei dati.

Se si decide di visualizzare le opzioni del filtro dati "con i dati", non consigliamo di 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 al livello visivo al selettore del prodotto stesso.

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

Total Quantity = SUM(Sales[Quantity])

Per visualizzare le opzioni del filtro dei dati del prodotto "con i dati", è sufficiente filtrare in base alla misura Total Quantity usando la condizione "non è vuota".

Diagramma che mostra che il riquadro Filtri per il filtro dei dati Prodotto ora filtra in base alla quantità totale non è vuoto.

Analisi da dimensione a dimensione

Uno scenario diverso che prevede relazioni bidirezionali considera una tabella fattuale come una tabella di collegamento . In questo modo, supporta l'analisi dei dati della tabella delle dimensioni all'interno del contesto di filtro di una tabella delle dimensioni diversa.

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

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

È possibile rispondere a entrambe le domande senza riepilogare i dati nella tabella dei fatti di bridging. Tuttavia, richiedono che i filtri vengano propagati da una tabella delle dimensioni all'altra. Quando i filtri vengono propagati tramite la tabella dei fatti, è possibile ottenere il riepilogo delle colonne della tabella delle dimensioni usando la funzione DAX DISTINCTCOUNT e possibilmente le funzioni DAX MIN e MAX.

Poiché la fact table si comporta come una tabella di connessione, è possibile applicare le linee guida per le relazioni molti-a-molti per mettere in relazione due tabelle delle dimensioni. Sarà necessaria la configurazione di almeno una relazione per filtrare in entrambe le direzioni. Per ulteriori informazioni, consultare le linee guida sulle relazioni molti-a-molti .

Tuttavia, come già descritto in questo articolo, questo design genererà probabilmente un impatto negativo sulle prestazioni e comporterà conseguenze sull'esperienza utente correlate alle opzioni del slicer "con dati". È quindi consigliabile attivare il filtro bidirezionale in una definizione di misura usando invece la funzione DAX CROSSFILTER. È possibile usare la funzione CROSSFILTER 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 del modello tra le tabelle Customer e Sales è stata impostata per filtrare in una direzione singola.

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

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

Nella tabella oggetti visivi seguente vengono visualizzate le statistiche relative a ogni prodotto venduto. La colonna Quantity è semplicemente la somma dei valori di quantità. La colonna Different Countries Sold rappresenta il conteggio distinto dei valori di area geografica di tutti i clienti che hanno acquistato il prodotto.

Diagramma che mostra che due prodotti sono elencati in una tabella visiva. Nella colonna Paesi Diversi Venduti, Jeans è 1 e T-shirt è 2.

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