Ok, alors essaie ceci :
<pre class=”language-markup”>Sum(
Filter(
Prestations;
Ligne.Id in ShowColumns(
Filter(
Lignes;
Commande.Id = Gallery8.Selected.ID
);
ID
)
);
Temps
)
Je te laisse mettre les bons noms de listes et de colonnes. ATTENTION à bien respecter les majuscules et minuscules entre ID
et Id
…😉
Explications (on lit toujours une formule de l’intérieur vers l’extérieur) :
- on filtre d’abord la liste des lignes correspondant à la commande
- ensuite on restreint le résultat à la seule colonne ID pour pouvoir utiliser l’opérateur in
- puis, on filtre les lignes de prestations sur la base des lignes identifiées précédemment
- et enfin on somme le temps passé
Dans cette formule tu vas avoir un problème de délégation car la fonction Filter() n’est pas capable de déléguer à SharePoint une condition du type ChampLookup.Id
. Donc si tu as un jour plus de 2000 lignes dans ta liste Lignes ou ta liste Prestations, le résultat sera partiel voire vide, donc incorrect.
Pour contourner ce problème je te recommande d’ajouter dans chacune de ces 2 listes une colonne qui va contenir l’ID de la donné liée. Soit :
- Dans la liste Lignes : une colonne CommandeID de type numérique qui va stocker l’ID de la commande concernée
- Dans la liste Prestations : une colonne LigneID de type numérique qui va stocker l’ID de la ligne de commande concernée
Ca fait un peu redondance mais je me l’autorise pour régler les pronlèmes de délégation ou faciliter les opérations de filtrage des données.
Alors tu pourras écrire la formule ci-dessus comme ceci et tu n’auras plus de problème de délégation :
<pre class=”language-markup”>Sum(
Filter(
Prestations;
LigneID in ShowColumns(
Filter(
Lignes;
CommandeID = Gallery8.Selected.ID
);
ID
)
);
Temps
)
Autre piste d’amélioration : ajouter directement une colonne CommandeID à ta liste Prestations pour éviter de devoir filtrer la liste Lignes. Tu pourrais alors simplement écrire :
<pre class=”language-markup”>Sum(
Filter(
Prestations;
CommandeID = Gallery8.Selected.ID
);
Temps
)
Voilou… N’hésite pas si tu as encore des questions…