![](https://ppfc.fr/wp-content/uploads/buddypress/groups/2/cover-image/652e9d877f782-bp-cover-image.jpg)
recherche requete
-
recherche requete
Posté par maxime sur 9 mai 2023 à 15h43Bonjour
J’ai une base de données : “Reservations” qui m’indique en exemple ci dessous des immatriculations, dates et lieux de restitution
je cherche une fonction qui m’affiche dans une galerie :
-
la dernière position connue de chaque véhicule
-
puis qui affiche dans cette liste que ceux dont le lieu de restitution est 1
dans l’exemple j’ai volontairement ajouter une occurence le 01/06/23 pour qu’il me trouve 1 comme dernier lieu de TT666TT
j’ai un début de piste avec
-
Distinct(Reservations;vehicule)
-
je pense un truc genre First mais après Date_reservation<= Today
-
mais par exemple je ne sais pas comment faire Date_Reservation <= Today
merci de votre aide
PostID=Pra5YOCgclogTe7
maxime a répondu Il y a 9 mois, 1 semaine 1 Membre · 10 Réponses -
-
10 Réponses
-
Hello maxime,
Pour y parvenir tu vas devoir utiliser une combinaison de fonctions :
-
GroupBy() : Pour regrouper tes données par véhicule
-
Sort() : Pour trier tes données par date
-
Last() ou First() : pour obtenir le premier ou dernier item
-
et Filter(), qui va te permettre de filtrer tes résultats par date et par lieu de réstitution
Donc dans ta galerie, en source de données, tu pourras mettre :
GroupBy( //pour grouper les données par véhiculen Sort( // on trie en amont par date de résan Filter( //on filtre la source en amont sur le lieu de restitution et la date de résan Reservations,n 'lieu restitution' = 1,n Date_Reservation <= Today()n ),n Date_Reservation,n SortOrder.Descendingn ),n "vehicule",n "Détails Réservation" // Les colonne non groupées, vont se retrouver au format table dans la colonne "Détails Réservation"n)
Dans les items de la galerie, un premier LabelText avec
ThisItem.vehicule
Et un second qui va indiquer la date et le créneau souhaité (trié et filtré)
With( n {FirstItem: First(ThisItem.'Détails Réservation')}, // on utilise With pour optimiser la formule et ne pas faire appel 2x à celle-cin FirstItem.Date_Reservation & " - " & FirstItem.créneau.Valuen)
Résultat :
On est partie de la liste :
et on obtient dans notre galerie les 2 seuls résultats qui réunissent tous les critères :
CommentID=FE0JpwEslZT7yEf, PostID=Pra5YOCgclogTe7
-
-
merci beaucoup, j’ai remplacé les , par des ; car sur la version que j’utilise ça marche mieux.
CommentID=Mg3v8jHxVZxzfQr, PostID=Pra5YOCgclogTe7
-
Oui désolé, j’ai pris le parti d’utiliser la syntaxe en-US car toutes les références sont sous ce format (y compris dans la doc MS) : pour passer en FR, il faut remplacer :
-
les , par des ;
-
les ; par des ;;
-
les . par des , (seulement pour les valeurs décimales)
SubCommentID=joU4vLNFNE11PtH, CommentID=Mg3v8jHxVZxzfQr, PostID=Pra5YOCgclogTe7
-
-
-
bonjour
en prenant un peu de temps depuis ta solution, je creuse un peu mais en fait j’ai des modifications et donc une nouvelle demande.
j’ai la base de données suivante
vehicule Date_Reservation créneau lieu_restitution
TT666TTt01/05/2023tMatint1nnTT666TTt02/05/2023tJournéet1nnBB111BBt03/05/2023tJournéet1nnTT666TTt01/07/2023tAprès-midit1nnGG444GGt04/05/2023tMatint2nnGG444GGt01/06/2023tAprès-midit5nnGG444GGt01/07/2023tMatint5nnGG444GGt01/08/2023tJournéet1
je souhaite regrouper le tableau par vehicule avec une colonne dont la valeur date est la dernière date avant date du jour.
cela donnerait
TT666TTt01/07/2023tAprès-midit1nnBB111BBt03/05/2023tJournéet1nnGG444GGt01/07/2023tMatint5n
et ensuite mettre un filtre par exemple lieu_restitution=1
cela donnerait
TT666TT 01/07/2023 Après-midi 1nnBB111BB 03/05/2023 Journée 1
Merci pour votre aide
CommentID=UbWYUh5oKBipQ4z, PostID=Pra5YOCgclogTe7
-
j’ai pensé commencé par
GroupBy(n Reservations;n "vehicule";n "Détails Réservation"n)
et après ajouter une colonne qui reprend dans détalis réservation, la dernière date de chaque vehicule avant aujourd’hui et la valeur du lieu_restitution de cette date
CommentID=gn6AxmlfwXrTQzk, PostID=Pra5YOCgclogTe7
-
donc j’arrive à ça
GroupBy(n Sort(n Filter(n Reservations;n Date_Reservation <= date_souhaitee.SelectedDaten );n Date_Reservation;n SortOrder.Descendingn );n "vehicule";n "Détails Réservation"n)
CommentID=SKo0olXyDTz0uwn, PostID=Pra5YOCgclogTe7
-
je vais plutot faire
GroupBy(n Sort(n Filter(n Reservations;n Date_Reservation <= date_souhaitee.SelectedDaten );n Date_Reservation;n SortOrder.Descendingn );n "vehicule";n "Data"n)
et ajouter un filtre sur
Filter(n ThisItem.Data;n Lieu_Restitution = 1n )n
mais j’avoue ne pas savoir faire un GroupBy et après un Filter
CommentID=N1sLn8pALax6tAB, PostID=Pra5YOCgclogTe7
-
C’est simple, il suffit d’ajouter la condition de ton second filtre dans le premier,
c’est d’ailleurs ce que j’avais mis dans la formule que je t’avais proposé au début :
GroupBy( //pour grouper les données par véhiculen Sort( // on trie en amont par date de résan Filter( //on filtre la source en amont sur le lieu de restitution et la date de résan Reservations,n 'lieu restitution' = 1,n Date_Reservation <= Today();n Lieu_Restitution = 1n ),n Date_Reservation,n SortOrder.Descendingn ),n "vehicule",n "Détails Réservation" // Les colonne non groupées, vont se retrouver au format table dans la colonne "Détails Réservation"n)
Si tu veux faire redescendre d’un rang la date le lieu etc, tu as plusieurs solutions :
-
une combinaison de AddColumns() et DropColumns()
DropColumns(nAddColumns(nGroupBy(n Sort(n Filter(n Reservations;n Date_Reservation <= date_souhaitee.SelectedDate;n Lieu_Restitution = 1n );n Date_Reservation;n SortOrder.Descendingn );n "vehicule";n "Data"n);"Date_Reservation";First(ThisRecord.Data).Date_Reservation;"Crenau_Reservation";First(ThisRecord.Data).Crenau_Reservation;"lieu_restitution";First(ThisRecord.Data).lieu_restitution);n"Data")
-
Un ForALL()
ForAll(nGroupBy(n Sort(n Filter(n Reservations;n Date_Reservation <= date_souhaitee.SelectedDate;n Lieu_Restitution = 1n );n Date_Reservation;n SortOrder.Descendingn );n "vehicule";n "Data"n);n{vehicule: ThisRecord.vehicule;nDate_Reservation:First(ThisRecord.Data).Date_Reservation;nCrenau_Reservation: First(ThisRecord.Data).Crenau_Reservation;nlieu_restitution: First(ThisRecord.Data).lieu_restitution}n)
SubCommentID=B8BTrTCwBiAbCpV, CommentID=N1sLn8pALax6tAB, PostID=Pra5YOCgclogTe7
-
-
-
A ce stade, ça devient un peu complexe, je te conseille de charger la donnée dans une collection
CommentID=hi5t3wOZnCVwTY6, PostID=Pra5YOCgclogTe7
-
hello, en fait j’ai décrypté tes conseils et j’ai trouvé la fonction finale qui marche super merci
Filter(n ForAll(n GroupBy(n Sort(n Filter(n Reservations;n Date_Reservation <= date_souhaitee.SelectedDaten );n Date_Reservation;n SortOrder.Descendingn );n "vehicule";n "Data"n );n {n Date_Reservation: First(ThisRecord.Data).Date_Reservation;n Lieu_Restitution: First(ThisRecord.Data).Lieu_Restitution;n vehicule: ThisRecord.vehiculen }n );n Lieu_Restitution in Filter(n Lieu;n Titre = choix.Textn ).IDn)
CommentID=tcAWHMYKhrtDPeR, PostID=Pra5YOCgclogTe7
Connectez-vous pour répondre.