Filtrer collection en fonction d'une autre collection

  • Filtrer collection en fonction d'une autre collection

    Posté par Mickael sur 24 février 2025 à 17h17

    Hello,

    est il possible de filtrer le contenu d’une collection (Collection 2) en fonction d’une autre collection (Collection 1) contenant à peu près les mêmes colonnes?

    Je souhaiterais créer un top10 des items les plus commandés par l’user connecté.

    Pour cela, j’ai créé une collection qui génère les 10 articles les + commandés (AddColumns & GroupBy) puis un FirstN(collection1,10)

    J’aimerais me servir de cette collection pour filtrer une autre collection (basée sur une liste SP) et qui ne prendrait que les référence présentes dans la collection 1.

    Exemple :

    Collection1 (Issue de la liste SP qui liste tous les items commandés par tout le monde) :

    Truc1 (Commandé 10 fois)

    Truc14 (Commandé 8 fois)

    Truc6 (Commandé 6 fois)

    Truc36 (Commandé 3 fois)

    Collection 2 (Issue du catalogue d’item – Liste SP) :

    Filtrée avec uniquement les références de la collection 1 :

    Truc1

    Truc14

    Truc6

    Truc36

    C’est faisable?

    Merci la team rescousse.

    • Cette discussion a été modifiée Il y a 2 semaines, 1 jour par  Mickael.
    Mickael a répondu Il y a 2 semaines, 1 jour 2 Membres · 2 Réponses
  • 2 Réponses
  • DavidZed

    Membre
    24 février 2025 à 17h46

    Tu peux avec une formule non délégable :

    Filter(‘Collection 2’ ; ‘Nom du bidule’ In ‘Collection 1′.’Nom du machin’)

    Autre solution, si tu affiches ta collection 2 dans une gallerie, tu peux appeller les valeurs de la collection 1 avec un lookup:

    LookUp( ‘Collection 2’ ; ‘Nom du bidule’ = ThisItem.’Nom du machin’ ; ‘Nom du fabricant’ )

    Attention cependant, limiter à 10 lookups, donc ne pas afficher X valeurs par ligne et si possible passer par une collection plutot que d’interroger la liste SP directement, tu peux avoir des soucis de perf

  • Mickael

    Membre
    25 février 2025 à 9h49

    @DavidZed

    Merci, il me semblait bien qu’il y avait un moyen de faire ça.

    J’ai opté pour ta première proposition et ça fonctionne plutôt bien.

    En revanche, j’ai multiplié les collections pour le faire, n’y aurait il pas un moyen de fusionner le tout.

    • Collection1 (collection basée sur ma liste SP listant tous les articles commandés par l’user connecté)
    • Collection_Top (collection qui groupe tous les items de même référence basée sur la collection1)
    • Collection_Top10 (collection qui ne garde que les 10 premiers de la collection Top)

    Actuellement j’ai donc dans mon OnStart ::

    ClearCollect( collection1, ShowColumns( Filter( ListeSP_Item_Ordered, ‘Created By.Email = User().Email), Title, Reference, MostOrder, ImageItem, ‘Created By’))

    ClearCollect( collection_Top, SortByColumns( AddColumns( GroupBy( Collection1, Reference, MostOrder), ‘NbrOccur’, Sum( MostOrder, MostOrder)), “NbrOccur”, SortOrder.Descending))

    ClearCollect( collection_Top10, SortByColumns( FirstN( collection_Top, 10), “NbrOccur”, SortOrder.Descending))

    Merci encore DavidZed.

Connectez-vous pour répondre.