recherche requete

Étiquetté : ,

  • recherche requete

    Posté par maxime sur 9 mai 2023 à 15h43

    Bonjour

    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 7 mois, 4 semaines 1 Membre · 10 Réponses
  • 10 Réponses
  • DavidZed

    Membre
    10 mai 2023 à 15h27

    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

  • maxime

    Membre
    10 mai 2023 à 15h37

    merci beaucoup, j’ai remplacé les , par des ; car sur la version que j’utilise ça marche mieux.

    CommentID=Mg3v8jHxVZxzfQr, PostID=Pra5YOCgclogTe7

    • DavidZed

      Membre
      10 mai 2023 à 15h39

      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

  • maxime

    Membre
    7 juillet 2023 à 8h52

    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

  • maxime

    Membre
    7 juillet 2023 à 9h43

    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

  • maxime

    Membre
    7 juillet 2023 à 10h03

    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

  • maxime

    Membre
    7 juillet 2023 à 13h25

    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

    • DavidZed

      Membre
      7 juillet 2023 à 16h42

      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

  • DavidZed

    Membre
    7 juillet 2023 à 16h43

    A ce stade, ça devient un peu complexe, je te conseille de charger la donnée dans une collection

    CommentID=hi5t3wOZnCVwTY6, PostID=Pra5YOCgclogTe7

  • maxime

    Membre
    20 juillet 2023 à 8h08

    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.