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 1 jour, 13 heures par  Thibault.
    Jonathan a répondu Il y a 21 heures, 30 minutes 2 Membres · 4 Réponses
  • 4 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

Connectez-vous pour répondre.