USERELATIONSHIP
Si applica a: Calcolo visivo misura tabella calcolata colonna calcolata
Specifica la relazione da usare in un calcolo specifico come relazione esistente tra columnName1 e columnName2.
Sintassi
USERELATIONSHIP(<columnName1>,<columnName2>)
Parametri
Termine | Definizione |
---|---|
columnName1 | Nome completo di una colonna esistente in sintassi DAX standard, che generalmente rappresenta il lato "molti" della relazione da usare. Se gli argomenti vengono dati in ordine inverso, prima dell'uso la funzione li scambia. Questo argomento non può essere un'espressione. |
columnName2 | Nome completo di una colonna esistente in sintassi DAX standard, che generalmente rappresenta il lato "uno" o "ricerca" della relazione da usare. Se gli argomenti vengono dati in ordine inverso, prima dell'uso la funzione li scambia. Questo argomento non può essere un'espressione. |
Valore restituito
La funzione non restituisce alcun valore. La funzione abilita solo la relazione indicata per la durata del calcolo.
Osservazioni:
CROSSFILTER può essere usato solo nelle funzioni che accettano un filtro come argomento, ad esempio: funzioni CALCULATE, CALCULATETABLE, CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR, TOTALMTD, TOTALQTD and TOTALYTD.
Non è possibile usare USERELATIONSHIP quando viene definita la sicurezza a livello di riga per la tabella in cui è inclusa la misura.
CALCULATE(SUM([SalesAmount]), USERELATIONSHIP(FactInternetSales[CustomerKey], DimCustomer[CustomerKey]))
, ad esempio, restituirà un errore se è definita la sicurezza a livello di riga per DimCustomer.USERELATIONSHIP usa le relazioni esistenti nel modello, identificandole in base alle colonne punto finale.
In USERELATIONSHIP lo stato di una relazione non è importante: il fatto che la relazione sia attiva o meno non influisce sull'utilizzo della funzione. Anche se è inattiva, la relazione viene usata ed esegue l'override di eventuali altre relazioni attive che potrebbero essere presenti nel modello, ma non sono indicate negli argomenti della funzione.
Se alcune delle colonne indicate come argomento non fanno parte di una relazione o se gli argomenti appartengono a relazioni diverse, viene restituito un errore.
Se sono necessarie più relazioni per creare un join tra la tabella A e la tabella B in un calcolo, ogni relazione deve essere indicata in una funzione USERELATIONSHIP diversa.
Se le espressioni CALCULATE sono annidate e più espressioni CALCULATE contengono una funzione USERELATIONSHIP, la funzione USERELATIONSHIP più interna sarà quella prevalente in caso di conflitto o ambiguità.
È possibile annidare fino a 10 funzioni USERELATIONSHIP. L'espressione potrebbe tuttavia avere un livello più profondo di annidamento. L'espressione di esempio seguente, ad esempio, è annidata a 3 livelli di profondità, di cui solo 2 per USEREALTIONSHIP:
=CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA]))
.Per le relazioni da 1 a 1, USERELATIONSHIP attiverà la relazione solo in una direzione. In particolare, i filtri potranno passare solo dalla tabella columnName2 alla tabella columnName1. Se si desidera un filtro incrociato bidirezionale, è possibile utilizzare due USERELATIONSHIPs con direzione opposta nello stesso calcolo. Ad esempio,
CALCULATE(..., USERELATIONSHIP(T1[K], T2[K]), USERELATIONSHIP(T2[K], T1[K]))
.
Esempio
L'esempio seguente illustra come eseguire l'override della relazione predefinita attiva tra le tabelle InternetSales e DateTime. La relazione predefinita esiste tra la colonna OrderDate della tabella InternetSales e la colonna Date della tabella DateTime.
Per calcolare la somma delle vendite Internet e consentire il sezionamento in base a ShippingDate invece che al tradizionale valore OrderDate, creare la misura [InternetSales by ShippingDate] usando l'espressione seguente:
= CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))
Le relazioni tra InternetSales[ShipmentDate] e DateTime[Date] devono esistere e non devono essere la relazione attiva. Inoltre, la relazione tra InternetSales[OrderDate] e DateTime[Date] deve esistere e deve essere la relazione attiva.