Partager via


Fonction USERELATIONSHIP (DAX)

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

Syntaxe

USERELATIONSHIP(<columnName1>,<columnName2>)

Paramètres

  • columnName1
    Nom d'une colonne existante, utilisant la syntaxe standard DAX et complète, qui 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 échangera avant de les utiliser. Cet argument ne peut pas être une expression.

  • columnName2
    Nom d'une colonne existante, utilisant la syntaxe standard DAX et complète, qui représente généralement le côté « un » ou le côté de recherche de la relation à utiliser ; si les arguments sont fournis dans l'ordre inverse la fonction les échangera avant de les utiliser. Cet argument ne peut pas être une expression.

Valeur de retour

La fonction ne retourne aucune valeur ; elle active uniquement la relation indiquée pour la durée du calcul.

Notes

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

  2. USERELATIONSHIP utilise les relations existantes du modèle identifiant les relations par leurs colonnes de point de fin.

  3. Dans USERELATIONSHIP, l'état d'une relation n'est pas important ; qu'elle soit active ou pas, la relation n'a aucun impact sur l'utilisation de la fonction. Même si la relation est inactive, elle sera utilisée et remplace toutes les autres relations actives qui peuvent être présentes dans le modèle mais qui ne sont pas mentionnées dans les arguments de fonction.

  4. Une erreur est retournée si l'une des colonnes nommées comme argument fait pas partie d'une relation ou si les arguments appartiennent à d'autres relations.

  5. 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 distincte.

  6. Si des expressions CALCULATE sont imbriquées et si plusieurs d'entre elles contiennent une fonction USERELATIONSHIP, la fonction USERELATIONSHIP la plus profonde est celle qui prévaut en cas de conflit ou d'ambiguïté.

  7. Au plus dix fonctions USERELATIONSHIP peuvent être imbriquées ; toutefois, votre expression peut avoir un niveau d'imbrication plus profond, par exemple l'expression suivante de l'exemple est imbriquée à 3 niveaux de profondeur mais uniquement à 2 pour USEREALTIONSHIP: =CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA])).

Exemple

L'exemple ci-dessous 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 sur Internet et permettre une segmentation par date d'expédition (ShippingDate) au lieu de la traditionnelle date de commande (OrderDate), vous devez créer une mesure, [InternetSales by ShippingDate], en utilisant l'expression suivante :

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

Dans PowerPivot : faites glisser la nouvelle mesure vers la zone Valeurs du volet droit, faites glisser la colonne InternetSales[ShippingDate] vers la zone Étiquettes de ligne ; les ventes sur Internet sont désormais segmentées par date d'expédition et non par date de commande, comme c'est généralement le cas dans ces exemples.

Pour que cet exemple fonctionne, la relation entre InternetSales[ShipmentDate] et DateTime[Date] doit exister et ne pas être la relation active ; de même, la relation entre InternetSales[OrderDate] et DateTime[Date] doit exister et être la relation active.