%ages dans collection

  • %ages dans collection

    Posté par Sylvain sur 11 mai 2022 à 21h42

    Hello tous,

    je m’arrache la tête avec la création d’une collection qui affiche des pourcentage. Je m’explique…

    J’ai une liste SharePoint qui reprend les activités journalières de mon service (liste simplifiée pour l’exemple)

    Je souhaite au final réaliser un graphique “camembert” qui me montre, par exemple, la répartition de l’activité d’Emmanuel pour la semaine n° 1, un peu comme ça :

    (inutile de contrôler si les pourcentage du graphique correspondent aux heures de la liste, c’est fait au pif pour l’exemple 😄 )

    J’ai donc créé une collection col_activite qui intègre un addColumns et un GroupBy afin d’espérer obtenir ce genre de chose :

    ClearCollect(n    col_activite;n    AddColumns(n        GroupBy(Filter(n                    Filter(n                        MaListeSharePoint;n                        no_semaine="1"n                    );n                agent="Emmanuel"n                );n            "Activite";n            "monGroupe"n        );n        "PERC_ACT";n        //La formule que je n'arrive pas à trouver !!! n    )n)

    Et donc je vous laisse deviner que la ligne :

    //La formule que je n'arrive pas à trouver !!!

    me pose problème 😄

    [edit…]

    J’ai créé une étape en ajoutant une colonne qui créé la somme des heures, qui me donne ça :

     ClearCollect(n    col_activite;n    AddColumns(n        GroupBy(Filter(n                    Filter(n                        MaListeSharePoint;n                        no_semaine="1"n                    );n                agent="Emmanuel"n                );n            "Activite";n            "monGroupe"n        );n        "SUM_HR";n        Sum(monGroupe;heures);ntt"PERC_ACT"ntt//La formule que je n'arrive pas à trouver !!!n    )n)

    Mais pour réaliser un pourcentage, j’ai besoin de “la somme de la somme des heures” c’est à dire 4+1,5+…+…

    après la formule est simple :

    PERC_ACT = 100 / (somme de la somme des heures) x SUM_HR

    Mais mon souci est de réaliser cette “somme des sommes” qui pourrait avoir cette syntaxe mais qui bien sur ne fonctionne pas car j’appelle dans la construction de ma collection, ma collection elle-même…

    Sum(col_activite;SUM_HR)

    Je pourrais éventuellement réaliser ce que je souhaite en créant 2 collections, mais je me dit qu’il doit bien y avoir une solution plus simple.

    Sylvain

    PostID=LYtw9tB08ujCDrq

    DavidZed a répondu Il y a 11 mois, 3 semaines 1 Membre · 4 Réponses
  • 4 Réponses
  • Sylvain

    Membre
    11 mai 2022 à 23h50

    J’ai fait ça, ça fonctionne, mais c’est un peu too much…

    ClearCollect(n    col_sommeHeures;n    AddColumns(n        GroupBy(Filter(n                    Filter(n                        MaListeSharePoint;n                        no_semaine="1"n                    );n                agent="Emmanuel"n                );n            "Activite";n            "monGroupe"n        );n        "SUM_HR";n        Sum(monGroupe;heures);n    )n);;nClearCollect(n    col_activite;n    AddColumns(nttcol_sommeHeures;ntt"PERC_ACT";ntt100/Sum(col_sommeHeures;SUM_HR)*SUM_HRnt)n)

    CommentID=rA7BxGWRotv4lTl, PostID=LYtw9tB08ujCDrq

  • R3dKap

    Membre
    12 mai 2022 à 7h36

    Pas mieux… 😉

    Seule petite optimisation que je pourrais proposer -> remplacer tes 2 Filter() par un seul :

    Filter(MaListeSharePoint; no_semaine = "1" && agent = "Emmanuel")

    CommentID=D2t3Hjl3jkPkc4g, PostID=LYtw9tB08ujCDrq

  • Sylvain

    Membre
    12 mai 2022 à 21h39

    Ah oui, pas pensé au &&, je le fais d’habitude pourtant 😄

    merci @R3dKap

    CommentID=DM1PpgRC5rkiUbX, PostID=LYtw9tB08ujCDrq

  • DavidZed

    Membre
    14 mai 2022 à 9h25

    Pour le filter, tu peux également séparer les tests logiques par un “;” c’est équivalent à un “&&”

    Pour ta collection, j’ajouterais un ForAll(Patch( après ton clear collect, du style:

    ForAll(col_activite;Patch(col_activite;ThisRecord;{PERC_ACT:100/sum(col_activité;SUM_HR)*ThisRecord.SUM_HR}))

    Il y a peut être possibilité d’optimiser en utilisant un with( avant ton clear collect pour charger tes records et faire les calculs directement dans le clearcollect, à tester

    CommentID=LLKf8j2PmVUhNIo, PostID=LYtw9tB08ujCDrq

Connectez-vous pour répondre.