Fonction Forall sur valeurs uniques Gallerie.

  • Fonction Forall sur valeurs uniques Gallerie.

    Posté par Mickael sur 20 mai 2025 at 16h23

    Bonjour,

    J’ai une Gallerie Sharepoint qui se présente de la manière suivante:

    Colonne 1 “Noms”

    Pierre

    Marie

    Louis

    Françis

    patrice

    francine

    Colonne2 “Test”

    Portugal

    France

    Portugal

    Italie

    France

    Italie

    Je souhaite appliquer une boucle sur la colonne de ma gallerie sharepoint Colonne 2 nommée “Test”

    et filtrer toutes les valeurs uniques de cette colonne pour ensuite récupérer toutes les 10 premières valeurs de ma colonne 1 “Noms” à stocker dans une variable

    Voici les valeurs que je souhaite récupérer:

    Pour Portugal >> Récupérer les valeurs pierre et Luis les stocker dans une variable1

    Pour France>> Récupérer les valeurs Marie et Patrice les stocker dans une autre variable2

    Pour italie Récupérer les valeurs Françis et Francine les stocker dans une autre variable3

    J’ai trouvé ce tutoriel mais j’ai du mal à modifier ces fonctions ci-dessous en rapport avec ma gallerie:

    ClearCollect(UniquesCollection, Distinct(GalerieTousLesElements, Test))

    ClearCollect(NomsCollection, AddColumns(UniquesCollection, “NomsAssocies”, LookUp(GalerieTousLesElements, Test = Result, Noms)))

    ForAll(
    NomsCollection,
    Set(VarNoms & Text(Index), NomsAssocies)
    )

    R3dKap a répondu 1 day, 6 hours ago 3 Membres · 4 Réponses
  • 4 Réponses
  • R3dKap

    Member
    26 mai 2025 at 22h36

    Salut @Mickael,

    Je sais pas si t’as trouvé ce que tu cherchais, mais voici une technique très simple pour y parvenir :

    ClearCollect(
    colData;
    {
    Noms: "Pierre";
    Test: "Portugal"
    };
    {
    Noms: "Marie";
    Test: "France"
    };
    {
    Noms: "Louis";
    Test: "Portugal"
    };
    {
    Noms: "Françis";
    Test: "Italie"
    };
    {
    Noms: "Patrice";
    Test: "France"
    };
    {
    Noms: "Francine";
    Test: "Italie"
    }
    );;
    ClearCollect(
    colResult;
    GroupBy(
    colData;
    Test;
    ListeNoms
    )
    );;
    Index(colResult; 1).ListeNoms;;// Pierre et Louis
    Index(colResult; 2).ListeNoms;;// Marie et Patrice
    Index(colResult; 3).ListeNoms;;// Françis et Francine

    😉

  • Mickael

    Member
    28 mai 2025 at 10h50

    Bonjour R3dKap,

    Merci beaucoup pour ton support!

    Malheureusement la liste des colonnes “Noms” et “Test” peut être prfois assez longue et surtout , ce ne sont jamais les mêmes noms à récupérer et les mêmes pays.

    C’est pour ça que j’avais pensé à utiliser une fonction Forall mais je ne sais pas du tout de comment utiliser les fonctions Forall et Clearcollect pour me récupérer les valeurs souhaitées.

  • Sébastien

    Member
    28 mai 2025 at 21h49

    Bonjour,

    La question que je me pose c’est pourquoi faire ce traitement ? Car en fonction de la réponse, la solution ne sera pas forcement la même. Est ce que c’est pour afficher le résultat dans une gallerie ou peut être une liste ?

    Dans tout les cas voici la doc du distinct qui est la base de la demande :

    https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/function-distinct

    Et justement il y a une partie qui reprend le cas avec un tri sur les pays.

    Sinon voici quelques explications qui j’espère pourrons débloquer la situation.

    Pour la sauvegarde de liste en cache nous avons deux solution, ClearCollect et Collect.

    La différent entre les deux et la suivant :

    Collect ajoute toujours les données sans jamais ré initialisé les données d’origine alors que ClearCollect vide la liste de donnée de base pour y ajouté les nouvelles.

    Petit exemple bidon :

    Collect(NomList; {name: "France"}); //Ici je crée une liste NomList et j'y ajoute un name avec France dedans

    Collect(NomList; {name: "Espagne"}); //Ici j'ajoute espagne dans ma collection

    Donc à ce moment là ma liste ressemble à ceci :

    [

    {name: "France"};

    {name: "Espagne"}

    ]

    Si maintenant nous réalisons la même opération avec ClearCollect :

    ClearCollect(NomListDeux; {name: "France"}); //Ici je crée une liste NomListDeux et j'y ajoute un name avec France dedans

    ClearCollect(NomListDeux; {name: "Espagne"}); //Ici je réinitialise ma liste et j'y ajoute espagne

    Donc à ce moment là ma liste ressemble à ceci :

    [

    {name: "Espagne"}

    ]

    France n’existe plus car la liste est reset à chaque ClearCollect, par contre une bonne utilisation dans un cas comme celui que j’ai détaillé c’est de reset avec ClearCollect par exemple lorsque l’utilisateur arrive sur une page et ensuite d’utilisé Collect pour charger la liste.

    Passons à la suite, dans les deux cas Collect & ClearCollect voici les paramètres

    Collect(

    (Source de données) ; //Ne pas oublié le ;

    (Données)

    )

    Tout ça pour dire qu’il va falloir travailler sur la source de donnée pour le problème de doublon.

    Pour ça nous avons Distinct qui fonctionne grosso modo comme un Filter ou Lookup par exemple

    Encore une fois voici le détaile des paramètres obligatoires (j’en passe certain à la trape volontairement)

    Distinct (

    (Source de données) ; //Ne pas oublié le ;

    (Champs) //Champs ou nous devons garder les uniques

    )

    Et donc si on prend le cas de base :

    Distinct (

    Liste_Sharepoint ;

    Test

    )

    Avec ceci nous venons de filter les données pour ne garder que les uniques MAIS rien n’est sauvegarder pour le moment.

    Ce qu’il faut bien comprendre ici c’est cas se moment là la fonction Distinct deviens une source de donnée, vous voyez le rapport ?

    Souvenez vous de ceci :

    Collect(

    (Source de données) ; //Ne pas oublié le ;

    (Données)

    )

    ça veux donc dire que je peux mettre ici le Distinct comme source de donnée, comme ceci :

    Collect(

    Distinct (

    Liste_Sharepoint ;

    Test

    )

    ;

    (Données)

    )

    Je vous laisse la partie donnée avec le nom exacte des colonnes mais ça devrais être quelque chose du genre.

    Collect(

    Distinct (

    Liste_Sharepoint ;

    Test

    )

    ;

    {

    name: nomColonne //ici name est remplaçable par ce que vous voulez bien sur

    }

    )

    Pour la suite ça dépend de votre utilisation des données mais voici ce que je ferais avec différent cas :

    Si je devais afficher les noms dans une gallerie et que j’avais à côté une dropdown qui me permet de selectionner un pays de la collection défini juste au dessus alors j’utiliserais comme source de donnée pour ma gallerie un Filter.

    Si maintenant j’ai des dropdown comme ceci :

    DropDown_Pays //Affiche notre collection de pays unique

    DropDown_Utilisateurs // affiche les utilisateurs en choix

    Alors là je bloque l’utilisation du DropDown_Utilisateurs pour obliger une selection dans DropDown_Pays, ensuite dans le onChange du DropDown_Pays je réalise un filter pour récupérer les noms utilisateurs que je stock dans une variables ou collection.

    et j’utilise cette variable ou collection pour alimenté mon DropDown_Utilisateurs

    Dans le cas ou DropDown_Pays change de valeurs ou perd la valeur je reset DropDown_Utilisateurs voir même re bloque DropDown_Utilisateurs

    J’espère que cette explication va vous débloquez, dans le cas contraire je reste à votre disposition si vous voulez approfondir le sujet.
    ET sinon une petite vidéo sur le sujet

    • This reply was modified 3 days, 2 hours ago by  Sébastien.
    • This reply was modified 3 days, 2 hours ago by  Sébastien.
    • This reply was modified 3 days, 2 hours ago by  Sébastien.
  • R3dKap

    Member
    30 mai 2025 at 22h36

    @Mickael,

    Le résultat du GroupBy() est une collection. Donc :

    LookUp(colResult; Test = "Portugal").ListeNoms te renvoie les noms de ce pays

    Comme tu le vois, c’est “dynamique”…

    C’est pas ça que tu voulais ?

    Tu pourrais afficher le résultat de ce regroupement en imbriquant 2 galeries :

    • une première galerie qui liste les pays
    • une autre galerie à l’intérieur de la première, pour lister les noms de chaque pays

Connectez-vous pour répondre.