DAX – SELECTEDVALUE pourquoi sans RELATED alors qu’en paramètre dans SUMX

  • DAX – SELECTEDVALUE pourquoi sans RELATED alors qu’en paramètre dans SUMX

    Posté par paul sur 23 janvier 2025 à 22h53

    Bonjour,

    j’ai créé deux mesures dans une table cw_ventes

    CA = SUMX(wc_vente,[quantite] * RELATED(wc_titre[prix]))

    PrixUnitaireSelected = SELECTEDVALUE(wc_titre[prix])

    <h2>Question ?</h2>

    Pourquoi SELECTEDVALUE ne nécessite pas la commande RELATED alors que la mesure est sur la table principale wc_vente et que SELECTEDVALUE est sur une colonne de la table wc_titre ?

    Merci pour vos réponses

    paul a répondu Il y a 1 semaine, 5 jours 2 Membres · 6 Réponses
  • 6 Réponses
  • Stef

    Membre
    24 janvier 2025 à 11h29

    Bonjour,

    SELECTEDVALUE ne travaille pas en contexte de ligne mais en contexte de filtre.

    Quand tu fais SUMX(wc_vente, …), Power BI itère sur chaque ligne de la table wc_vente :

    • Sur chaque ligne, pour aller chercher la colonne [prix] dans la table wc_titre, tu dois utiliser RELATED(wc_titre[prix]).

    À l’inverse, SELECTEDVALUE(wc_titre[prix]) est évalué dans un contexte de filtre global (sans itération directe sur chaque ligne de wc_vente). Du coup, SELECTEDVALUE peut accéder directement à la colonne wc_titre[prix] (si la relation est bien définie) sans passer par RELATED, parce que tu n’es pas en situation de contexte de ligne à ce moment-là.

    • Cette réponse a été modifiée Il y a 2 semaines, 1 jour par  Stef.
  • paul

    Membre
    24 janvier 2025 à 11h56

    Merci Stef pour ta réponse qui me permet de comprendre un peu mieux les concepts sur lesquels repose PWBI.

    Je comprends la notion de mode ligne qui est le contexte SQL de base.

    Par contre c’est plus touchy pour la notion de mode filtre qui n’itère pas sur chaque ligne. Serait-ce faux de dire que le SELECTEDVALUE se fait après les opérations de traitement itèratif de regroupement (ici un SUMX) et que ça sous-entend qu’il faille une espèce de relation (1,1) pour que cela fonctionne.

    Toutefois comment fait-il la relation par id alors que ce n’est pas precisé dans la mesure au contraire d’une requête SQL ?

    Encore merci pour ta réponse et ton aide

  • Stef

    Membre
    24 janvier 2025 à 12h03

    Dire que « SELECTEDVALUE se fait après le SUMX » n’est pas tout à fait exact. Chaque mesure est évaluée dans un contexte de filtres défini à l’instant où on l’appelle. Quand tu écris une mesure basée sur SELECTEDVALUE(wc_titre[prix]), DAX regarde le contexte de filtre en cours (qui dépend par exemple des segments, du pivot, d’autres filtres, etc.) et détermine si, dans ce contexte, il n’y a qu’une seule valeur possible pour wc_titre[prix]. S’il n’y en a qu’une, il la retourne, sinon c’est BLANK ou la valeur alternative si tu l’as définie.

  • paul

    Membre
    24 janvier 2025 à 22h50

    Stef merci pour ta réponse.

    La notion de de contexte ligne me parle et j’associe RELATED à inner join wc_titre.idTitre = wc_vente.idTitre du SQL

    Par contre la notion de contexte filtre ça m’est vraiment nébuleux car je ne comprends pas comment le lien se fait entre la selection d’un titre et son prix unitaire sans RELATED

  • Stef

    Membre
    27 janvier 2025 à 11h16
    • Row context (SUMX + RELATED) : tu boucles sur la table des faits (wc_vente) et vas chercher explicitement les colonnes associées (wc_titre[prix]) grâce à RELATED.
    • Filter context (SELECTEDVALUE) : tu comptes sur la propagation des filtres (mécanisme par lequel une sélection (par exemple sur une table de dimensions) restreint automatiquement les lignes des autres tables reliées, assurant ainsi la cohérence des données visibles) dans le modèle. Tu n’as pas besoin de préciser la relation, car Power BI applique déjà le filtre (du titre sélectionné) à la table wc_titre, ce qui ne laisse qu’une (ou plusieurs) ligne(s) possible(s). SELECTEDVALUE renvoie donc la valeur unique du prix pour le titre filtré.
  • paul

    Membre
    27 janvier 2025 à 17h36

    Merci Stef pour tes explications

Connectez-vous pour répondre.