Abbiamo la tabella ordini_0.csv con i campi:
- id_ordine
- data_ordine
- data_consegna
- id_prodotto
- quantità
- id_cliente
- fatturato
E la tabella calendario-dax_0.txt ( creata in DAX
Calendario =
VAR DataMin = MIN( Ordini[data_ordine] )
VAR DataMax = MAX( Ordini[data_consegna] )
RETURN
ADDCOLUMNS(
CALENDAR( DataMin, DataMax ),
"anno", YEAR( [Date] ),
"mese_numero", MONTH( [Date] ),
"mese", FORMAT( [Date], "MMMM", "it-IT" ),
"giorno", DAY( [Date] ),
"giorno_sett", FORMAT( [Date], "dddd", "it-IT" ),
"trimestre", "T" & QUARTER( [Date] )
)
Cosa succede se creiamo la relazione tra i campi
- data_ordine
- data_consegna
con il campo [Date] del calendario?
Vediamolo in pratica
Importiamo gli ordini
Da PowerBI importiamo la tabella ordini.csv otteniamo

Terminiamo l'importazione con File > Chiudi e applica
Creiamo la tabella calendario
Dal menù Modellazione > Nuova tabella.
Incolliamo il codice presente nel file calendario-dax.txt e confermiamo

Andiamo su visualizzazione tabella
e formattiamo i campi:
Date - Data - Short Date

Mese - Ordina per colonna - Mese_numero

Contrassegnare come tabella data
Perché tutto Funzioni occorre contrassegnare la tabella Calendario come Data

Tabella Ordini
Nella tabella ordini impostiamo i campi data_ordine e data-consegna come Short Date

Creazione delle Relazioni
Con il pulsante
visualizzazione modello andiamo a creare le relazioni:
Dalla tabella ordini trasciniamo data_ordine sul campo Date della tabella Calendario

Si crea la relazione attiva Molti-a-uno

Proviamo a fare lo stesso con il campo data_consegna.
In questo caso la relazione viene impostata come non attiva

Infatti se proviamo a impostare la relazione come attiva appare il messaggio

Questo perché PowerBI ci consiglia di accedere dalla tabella ordini alla tabella Calendario tramite una sola relazione.

La relazione non attiva viene visualizzata con una linea tratteggiata.
Misure
Vogliamo calcolare il Fatturato in base alla Data Ordine.
In questo caso la misura è molto semplice
Fatturato per Data Ordine =
SUM( Ordini[fatturato] )

Infatti inseriamo un oggetto visivo
Filtro dei Dati con il campo mese

Inseriamo un oggetto
scheda con la misura Fatturato per data

A seconda del mese che scegliamo cambia l'importo.

Vogliamo calcolare questo importo in base alla data di consegna.
Creiamo la misura Fatturato per Data Consegna
Fatturato per Data Consegna =
CALCULATE(
SUM( Ordini[fatturato] ),
USERELATIONSHIP( Ordini[data_consegna], Calendario[Date] )
)

La funzione DAX USERELATIONSHIP attiva la relazione "dormiente" tra Ordini[data_consegna] e Calendario[Date] inibendo temporaneamente l'altra relazione.
Se inseriamo un nuovo oggetto visivo scheda con questa misura otteniamo valori differenti.
Ad ES a gennaio alcuni ordini non sono stati consegnati e quindi c'è una differenza di totali.

il file relazioni ambigue.pbix contiene il progetto creato




