USERELATIONSHIP

S’applique à :Colonne calculéeTable calculéeMesureCalcul visuel

Spécifie la relation à utiliser dans un calcul spécifique, comme celle qui existe entre columnName1 et columnName2.

Syntaxe

USERELATIONSHIP(<columnName1>,<columnName2>)  

Paramètres

Terme Définition
columnName1 Nom complet d’une colonne existante spécifié avec la syntaxe DAX standard. Il représente généralement le côté « plusieurs » de la relation à utiliser. Si les arguments sont fournis dans l’ordre inverse, la fonction les permute avant de les utiliser. Cet argument ne peut pas être une expression.
columnName2 Nom complet d’une colonne existante spécifié avec la syntaxe DAX standard. Il représente généralement le côté « un » ou le côté de la recherche de la relation à utiliser. Si les arguments sont fournis dans l’ordre inverse, la fonction les permute avant de les utiliser. Cet argument ne peut pas être une expression.

Valeur de retour

La fonction ne retourne aucune valeur. Elle autorise uniquement la relation indiquée pendant la durée du calcul.

Remarques

  • USERELATIONSHIP peut être utilisé uniquement dans les fonctions qui utilisent un filtre comme argument, par exemple : CALCULATE, CALCULATETABLE, CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR, TOTALMTD, TOTALQTD et TOTALYTD.

  • USERELATIONSHIP ne peut pas être utilisé quand la sécurité au niveau des lignes est définie pour la table dans laquelle la mesure est incluse. Par exemple, CALCULATE(SUM([SalesAmount]), USERELATIONSHIP(FactInternetSales[CustomerKey], DimCustomer[CustomerKey])) retourne une erreur si la sécurité au niveau des lignes est définie pour DimCustomer.

  • USERELATIONSHIP utilise les relations existantes du modèle, en identifiant les relations par leurs colonnes de fin.

  • Dans USERELATIONSHIP, l’état d’une relation n’a pas d’importance. Autrement dit, que la relation soit active ou non, cela n’a pas d’effet sur l’utilisation de la fonction. Même si la relation est inactive, elle est utilisée et remplace les autres relations actives qui peuvent être présentes dans le modèle, mais qui ne sont pas mentionnées dans les arguments de la fonction.

  • Une erreur est retournée si l’une des colonnes nommées comme argument ne fait pas partie d’une relation ou si les arguments appartiennent à des relations différentes.

  • Si plusieurs relations sont nécessaires pour joindre la table A à la table B dans un calcul, chaque relation doit être indiquée dans une fonction USERELATIONSHIP différente.

  • Si des expressions CALCULATE sont imbriquées et que plusieurs expressions CALCULATE contiennent une fonction USERELATIONSHIP, c’est la fonction USERELATIONSHIP la plus intérieure qui prévaut en cas de conflit ou d’ambiguïté.

  • Jusqu’à 10 fonctions USERELATIONSHIP peuvent être imbriquées ; cependant, votre expression peut avoir un niveau d’imbrication supérieur. Par exemple, l’exemple d’expression ci-dessous est imbriquée sur 3 niveaux, alors que USERELATIONSHIP est imbriquée sur seulement 2 niveaux : =CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA])).

  • Pour les relations 1 à 1, la fonction USERELATIONSHIP active la relation dans une direction uniquement. En particulier, les filtres peuvent uniquement passer de la table columnName2 à la table columnName1. Si vous souhaitez effectuer un filtrage croisé bidirectionnel, deux fonctions USERELATIONSHIP avec une direction opposée peuvent être utilisées dans le même calcul. Par exemple : CALCULATE(..., USERELATIONSHIP(T1[K], T2[K]), USERELATIONSHIP(T2[K], T1[K])).

Exemple

L’exemple suivant montre comment remplacer la relation par défaut active entre les tables InternetSales et DateTime. La relation par défaut existe entre la colonne OrderDate de la table InternetSales et la colonne Date de la table DateTime.

Pour calculer la somme des ventes Internet et autoriser un découpage par date d’expédition (ShippingDate) et non par la traditionnelle date de commande (OrderDate), créez une mesure, [InternetSales par ShippingDate], à l’aide de l’expression suivante :

= CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))  

Les relations entre InternetSales[ShipmentDate] et DateTime[Date] doivent exister et ne doivent pas constituer la relation active. De même, la relation entre InternetSales[OrderDate] et DateTime[Date] doit exister et doit être la relation active.