Liste déroulante de filtre distinct provenant de colonnes différentes

  • Liste déroulante de filtre distinct provenant de colonnes différentes

    Posté par Fiona sur 4 octobre 2024 à 9h41

    Bonjour,

    J’aimerais afficher dans une liste déroulante les noms qui s’y trouvent, mais sans répétitions du même nom. C’est pourquoi, j’ai fait cette expression :

    • Distinct(Filter(ListeFormation; !IsBlank(Ref_tech1));Ref_tech1 && Ref_tech2)

    Néanmoins, cela ne fonctionne pas et aucun nom n’apparaît. Par ailleurs, lorsque je clique sur ma formule pour voir le problème, un message d’erreur ou plutôt d’explication mentionne ceci :

    • L’expression était destinée à filtrer la table ‘ListeFormation’ pour inclure uniquement les lignes où la colonne ‘Ref_tech1’ n’est pas vide, puis extraire les valeurs distinctes des colonnes ‘Ref_tech1’ et ‘Ref_tech2’. Cependant, l’erreur indique que l’opération ‘Not’ n’est pas prise en charge par le connecteur, ce qui signifie que la partie de la formule qui utilise ‘!IsBlank((Ref_tech1))’ peut ne pas fonctionner correctement sur des jeux de données volumineux.

    Je ne vois pas comment l’écrire d’une autre façon. Pouvez-vous m’aider, s’il-vous plaît ?

    Fiona a répondu Il y a 1 semaine, 3 jours 3 Membres · 5 Réponses
  • 5 Réponses
  • DavidZed

    Membre
    4 octobre 2024 à 10h33

    Hello,

    Distinct() ne fonctionne qu’avec une seule colonne, si tu veux obtenir une table qui recense les combinaisons uniques de plusieurs colonne il faudra utiliser la fonction GroupBy (lien vers MS learn).

    En faisant :

    GroupBy(ListeFormations ; Ref_tech1 ; Ref_tech2 ; Details)

    Tu obtiendras une table avec ces combinaisons uniques le champ Details contiendra toutes les autres colonnes au format table, si tu n’as pas besoin de ces sous enregistrements, tu peux ajouter un DropColumns() pour l’enlever :

    DropColumns(GroupBy(ListeFormations ; Ref_tech1 ; Ref_tech2 ; Details) ; Details)

    Enfaisant des recherches sur GroupBy dans ce forum tu trouveras plus d’exemples.

  • R3dKap

    Membre
    4 octobre 2024 à 10h35

    Salut Fiona,

    1. Que contiennent tes colonnes Ref_tech1 et Ref_tech2 ?
    2. De quel type sont ces colonnes (texte, user, oui/non, …) ?
    3. Que veux-tu afficher dans ta liste déroulante au final ?
  • Fiona

    Membre
    4 octobre 2024 à 14h17

    Pour répondre à vos questions ;

    • Que contiennent tes colonnes Ref_tech1 et Ref_tech2 ?

    Elles contiennent des noms.

    • De quel type sont ces colonnes (texte, user, oui/non, …) ?

    Leur type est texte.

    • Que veux-tu afficher dans ta liste déroulante au final ?

    Je souhaite afficher une liste de noms, mais en faisant en sorte qu’aucun nom identique n’apparaisse plusieurs fois.

    Par exemple si j’ai dans la colonne Ref_tech1 :

    • Nom1; Nom2; Nom5;

    et dans la colonne Ref_tech2

    • Nom2; Nom3; Nom4;

    Je veux qu’à la fin, dans Power Apps, le filtre affiche : Nom1; Nom2; Nom3; Nom4; Nom5;

    • Cette réponse a été modifiée Il y a 1 semaine, 6 jours par  Fiona.
  • R3dKap

    Membre
    4 octobre 2024 à 18h00

    Ok, je vois… Alors voilà la formule (testée chez moi 😉) :

    ClearCollect(
    ListeFormations;
    {
    ID: 1;
    Ref_tech1: "Nom1";
    Ref_tech2: "Nom2"
    };
    {
    ID: 2;
    Ref_tech1: "Nom2";
    Ref_tech2: "Nom3"
    };
    {
    ID: 3;
    Ref_tech1: "Nom5";
    Ref_tech2: "Nom4"
    }
    );;
    ClearCollect(
    ListeTechs;
    Sort(
    Distinct(
    Table(
    RenameColumns(
    ListeFormations.Ref_tech1;
    Ref_tech1;
    Ref_tech
    );
    RenameColumns(
    ListeFormations.Ref_tech2;
    Ref_tech2;
    Ref_tech
    )
    );
    Ref_tech
    );
    Value
    )
    );;

    Le ClearCollect() c’est juste pour simuler ta liste ListeFormations

    Explications :

    • ListeFormations.Ref_tech1 renvoie une table qu’avec la colonne Ref_tech1 (idem pour Ref_tech2)
    • Dans chacune de ces tables on renomme les colonnes Ref_tech1 et Ref_tech2 pour qu’elles s’appellent toutes les 2 Ref_tech (on utilise RenameColumns() pour faire ça)
    • Ensuite on les fusionne en une seule table avec la fonction Table()
    • Enfin, on supprime les doublons avec Distinct() (ce dernier renvoie toujours une table à une colonne qui s’appelle Value)
    • Et on termine en triant le résultat sur cette colonne Value

    On obtient bien :

    • Nom1
    • Nom2
    • Nom3
    • Nom4
    • Nom5

    Voilou… 😉

  • Fiona

    Membre
    7 octobre 2024 à 11h48

    Bonjour,

    Votre code a fonctionné dans mon application. Pour ma part, je n’en ai eu besoin que de cette partie :

    Sort(
    Distinct(
    Table(
    RenameColumns(
    ListeFormations.Ref_tech1;
    Ref_tech1;
    Ref_tech
    );
    RenameColumns(
    ListeFormations.Ref_tech2;
    Ref_tech2;
    Ref_tech
    )
    );
    Ref_tech
    );
    Value
    )

    Je vous remercie beaucoup pour votre aide !

Connectez-vous pour répondre.