Table Calculée + SelectedValue

Étiquetté : ,

  • Table Calculée + SelectedValue

    Posté par Thibault sur 16 octobre 2024 à 20h27

    Bonjour à tous,

    je suis confronté à un problème.

    Je cherche à réutiliser la valeur d’un selectedvalue dans différents calculs avec des relations (actives et inactives) et notamment via un search/contains/containsstring ou Pathcontains selon les cas ;mais je n’y parviens pas.
    Je me suis donc dis que j’allais essayer en créant une table calculée.

    Problème, comme pour mes calculs, avec une valeur en dur type “MAT” ça fonctionne. Avec un selectedvalue ça ne fonctionne pas.

    Quelqu’un saurait me dire si ces 2 notions (table calculée + selectedvalue) sont compatibles? Et si oui, peut-être existe-t-il certaines règles à respecter que j’ai pu omettre.

    Exemple de formule qui ne fonctionne pas et me remonte toute la table :

    <div>
    <div>Table_Collab_Filtrés =</div>
    <div>VAR Collab_selected=SELECTEDVALUE('F_COLLAB'[COL_CODE_COLLAB])</div>
    <div>RETURN</div>
    <div>SELECTCOLUMNS(</div>
    <div> FILTER(</div>
    <div> F_COLLAB;</div>
    <div> SEARCH(Collab_selected;F_COLLAB[COL_SUPERIEUR];1;0)>0</div>
    <div> );</div>
    <div> "Code_Collab";F_COLLAB[COL_CODE_COLLAB];</div>
    <div> "Code_Resp";F_COLLAB[COL_SUPERIEUR];</div>
    <div> "Chemin";F_COLLAB[_CheminHierarchique]</div>
    <div> )
    si je rajoute une colonne test, elle est vide :
    Colonne_Test = SELECTEDVALUE('F_COLLAB'[COL_CODE_COLLAB])

    La même création de table avec une valeur en dur (et une variable qui ne sert à rien donc) fonctionne parfaitement :
    <div>
    <div>Table_Collab_Filtrés =</div>
    <div>VAR Collab_selected=SELECTEDVALUE('F_COLLAB'[COL_CODE_COLLAB])</div>
    <div>RETURN</div>
    <div>SELECTCOLUMNS(</div>
    <div> FILTER(</div>
    <div> F_COLLAB;</div>
    <div> SEARCH("MAT";F_COLLAB[COL_SUPERIEUR];1;0)>0</div>
    <div> );</div>
    <div> "Code_Collab";F_COLLAB[COL_CODE_COLLAB];</div>
    <div> "Code_Resp";F_COLLAB[COL_SUPERIEUR];</div>
    <div> "Chemin";F_COLLAB[_CheminHierarchique]</div>
    <div> )</div>
    </div>
    Edit : en creusant dans les forums anglophones, je lis qu’effectivement ce n’est pas possible pour des raisons de contexte (pas bien saisi pourquoi…) et surtout que la table calculée est une table figée et non une table qui se recalcule à chaque fois.</div>
    <div>J’ai tenté la mesure suivante, mais sans succès :</div>
    <div>Mesure_Collab_Filtrés =
    VAR Collab_selected = SELECTEDVALUE('F_COLLAB'[COL_CODE_COLLAB])
    VAR Table_Filtree =
    FILTER(
    F_COLLAB;
    NOT(ISBLANK(Collab_selected)) && SEARCH(Collab_selected; F_COLLAB[COL_SUPERIEUR]; 1; 0) > 0
    )
    RETURN
    CONCATENATEX(Table_Filtree; F_COLLAB[COL_SUPERIEUR]; ";")</div>
    <div>
    Je suis donc à l’écoute de vos lumières 💡</div>
    <div> </div>
    <div>Merci par avance pour votre aide.
    Bonne soirée</div>
    </div>

    • Cette discussion a été modifiée Il y a 2 mois, 1 semaine par  Thibault.
    Thibault a répondu Il y a 2 mois 2 Membres · 5 Réponses
  • 5 Réponses
  • Jonathan

    Membre
    16 octobre 2024 à 21h20

    Bonjour Thibault,

    Dans les fonctions itératives ou dans les colonnes calculées, on est dans le contexte de ligne et non le contexte de filtre. Il faut générer une transition de contexte pour passer du contexte de ligne au contexte de filtre. Pour cela, deux options, soit utiliser une mesure soit rajouter un Calculate.

    Ici le selectedvalue sans transition de contexte contient plusieurs valeurs possibles donc il retourne blank à chaque fois.

  • Thibault

    Membre
    17 octobre 2024 à 12h49

    Bonjour Jonathan,

    merci pour ton retour rapide.

    Peux-tu m’en dire plus sur l’insertion du calculate dans ce cas de figure stp?

    Merci par avance

  • Jonathan

    Membre
    17 octobre 2024 à 13h05

    De rien !

    Pour faire le test et comprendre ce qu’il se passe, ajoute le dans ta colonne Test. Au lieu de Selectedvalue, Calculate de Selectedvalue. Ça va générer une transition de contexte et ça va filtrer les valeurs dans ta colonne Test.

  • Jonathan

    Membre
    17 octobre 2024 à 13h09

    Ensuite pour tester dans ta table, tu n’utilises pas la variable et tu places directement Calculate du Selectedvalue à la place de ta variable dans le Filter.

    Je ne sais pas précisément ce que tu cherches à faire mais généralement on fait des mesures plutôt que des tables physiques en Dax. C’est-à-dire que les tables en Dax sont souvent des tables virtuelles.

    Bon courage pour la suite de ton projet

  • Thibault

    Membre
    22 octobre 2024 à 13h15

    Salut Jonathan,

    encore merci pour tes explications.

    Malheureusement, je n’ai pas réussi.

    Je vais tenter d’expliquer ce que je cherche à faire.

    Aujourd’hui j’ai 3 tables :

    1. Table Factures, qui contient une colonne Code_Affaire
    2. Table Affaires, qui contient une colonne Code_Affaire, 4 colonnes pour les responsables comm, fin, prod et affaires (chacune ayant un trigramme renseigné dedans et correspondant à un code_collab), et 1 colonne _Combo_Resp qui concatène les 4 colonnes responsables.
    3. Table Collab, avec une colonne Code_collab et une colonne Supérieur, les 2 étant des trigrammes.

    J’ai créé mes relations entre Factures et Affaires et des relations inactives entre Affaires et Collab.

    J’arrive à récupérer les affaires et le montant des factures d’un collab sélectionné sans trop de difficulté.

    J’aimerais être en mesure de récupérer également les affaires des subordonnés.
    Exemple, si le collab CRE a pour supérieur TSP dans la table Collab, je souhaite, qu’en sélectionnant TSP cela m’affiche les affaires et les montants factures des affaires de TSP + CRE. (1 supérieur peut avoir bien plus qu’un subordonné). Et là je sèche avec mon selectedvalue car il ne remonte pas dans les calculs de mes mesures. Et il devrait faire la recherche pour CHAQUE ligne trouvée ayant TSP en supérieur.
    Je ne sais pas si c’est très clair… N’hésite pas à me le dire.

    Je fabrique un petit fichier anonyme et je le poste ici.

    Ah tiens, on ne peut pas poster de fichier ici?
    Du coup je l’ai déposé ici.

    Merci par avance

    • Cette réponse a été modifiée Il y a 2 mois par  Thibault.
    • Cette réponse a été modifiée Il y a 2 mois par  Thibault.

Connectez-vous pour répondre.