IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Designer Discussion :

[5] Objet semaines précédentes


Sujet :

Designer

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut [5] Objet semaines précédentes
    Bonjour,

    J'aimerais créé un objet dans le designer qui me donne les 5 semaines précédentes (par rapport à un numéro de semaine que l'utilisateur entre comme invite).

    Ex:
    L'utilisateur répond à l'invite "N° semaine"= 37
    et avec l'objet "5 semaines precedentes", j'affiche 36,35,34,33,32.

    Vous avez une idée?
    (A voir après comment je peux le mettre en place à cheval sur 2 années...)

    PS: j'ai oublié de préciser que j'etais sous BO 5 (et oui!)

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    J'ai résolu une partie de mon Pb en faisaint une condition :
    BUDE.TB_CALENDRIER.I_NO_SEM between @Prompt('Semaine?','N',,BUDE.TB_CALENDRIER.I_NO_SEM,mono,free)-4 and (@Prompt('Semaine?','N',,BUDE.TB_CALENDRIER.I_NO_SEM,mono,free) )


    PAr contre je ne sais pas comment je peux jongler sur 2 années...

  3. #3
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Bonjour,
    On va peut être essayer de faire plus simple :
    Dans Designer : Créer un filtre
    Nom : 5 semaines précédantes
    Clause Where :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Table.Date <= (trunc(sysdate,'year') 
    + @Prompt('Numéro de semaine','N',,mono,free) *7) 
    AND 
    Table.Date >=   ((trunc(sysdate,'year') 
    +@Prompt('Numéro de semaine','N',,mono,free) *7) -35)
    Bien entendu on peut aussi laisser le choix du nombre de semaines en arrière :
    Nom : x semaines en arrière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Table.Date <= (trunc(sysdate,'year') 
    + @Prompt('Numéro de semaine','N',,mono,free) *7) 
    AND 
    Table.Date >=   ((trunc(sysdate,'year') 
    + @Prompt('Numéro de semaine','N',,mono,free) *7) 
    - (@Prompt('Combien de semaines ?','N',,'mono, free)*7))
    Explication :
    Etape 1 Calculer la date du 1er jour de l'annéee en cours
    Etape 2 Calculer le dernier jour de la semaine choisie par l'utilisateur
    1er jour de l'année + (N° de semaine x 7 jours)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trunc(sysdate,'year')+@Prompt('Numéro de semaine','N',,mono,free) *7)
    Etape 3 Trouver la borne inférieure en enlevant à la date de borne supérieure (Nb de semaines * 7 jours)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ((trunc(sysdate,'year') 
    + @Prompt('Numéro de semaine','N',,mono,free) *7) 
    - (@Prompt('Combien de semaines ?','N',,'mono, free)*7))

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2008
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par Bruno2r Voir le message
    Etape 2 Calculer le dernier jour de la semaine choisie par l'utilisateur
    1er jour de l'année + (N° de semaine x 7 jours)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trunc(sysdate,'year')+@Prompt('Numéro de semaine','N',,mono,free) *7)
    Bonjour,

    Petit problème que me pose cette solution, si le premier jour de l'année est un mercredi par exemple, on va trouver comme borne supérieure un mercredi et non pas le dimanche de la semaine n° xx. La semaine sera donc incomplète.

    Mon idée serait donc de trouver dans un premier temps le dernier jour de la semaine sélectionnée (le dimanche) pour avoir la borne sup et ensuite enlever (5*7+1) jours pour avoir la borne inf (le "+1" c'est pour partir du lundi)

    Pistes à peut-être étudier:
    - utiliser des fonctions qui nous donne le dernier jour de la semaine sélectionnée. Comme ça, ça ne me vient pas ... En plus je me demande si on va pas avoir besoin de l'année car la semaine 14 de 2007, ça doit pas être la même que la semaine 14 de 2008!
    - utiliser une table de temps

  5. #5
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Citation Envoyé par alextoucour Voir le message
    Bonjour,

    Petit problème que me pose cette solution, si le premier jour de l'année est un mercredi par exemple, on va trouver comme borne supérieure un mercredi et non pas le dimanche de la semaine n° xx. La semaine sera donc incomplète.

    Mon idée serait donc de trouver dans un premier temps le dernier jour de la semaine sélectionnée (le dimanche) pour avoir la borne sup et ensuite enlever (5*7+1) jours pour avoir la borne inf (le "+1" c'est pour partir du lundi)
    .......
    - utiliser une table de temps
    Remarque tout à fait pertinente.
    Il faut que steinia nous dise si où il fait commencer la première semaine de 2008 (sachant que BO n'est pas fiable la dessu, je lui conseille plutôt de se référer à un calendrier)
    En fonction de sa réponse, on substituera à la date du premier jour de l'année la date du premier jour de la première semaine.
    On t'écoute.

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2008
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par alextoucour Voir le message
    ... ensuite enlever (5*7+1) jours pour avoir la borne inf (le "+1" c'est pour partir du lundi)
    Me suis planté: si on "enlève", c'est (5*7-1) ou sinon on "enlève" 5*7 jours et on prend le jour d'après (+1). Mais pas en même temps!

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Merci pour vos reponses, ca me donne des pistes.
    Oui il faut que je commence sur une semaine entiere : du lundi au dimanche.

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    J'aurais juste un pb si je fais ce filtre.
    Car ds la requete BO, je vais par ex mettre Semaine 29 de l'année 2008 (car j'ai plusieurs années d'historique).

    Ce qui donne un filtre : Annee=2008 et semaine=29 => la ca fonctionne.

    Mais si je mets Annee=2008 et semaine=1 => La je n'aurais que la premiere semaine 2008 et non pas les 4 dernières semaine de 2007...

  9. #9
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Citation Envoyé par steinia Voir le message
    J'aurais juste un pb si je fais ce filtre.
    Car ds la requete BO, je vais par ex mettre Semaine 29 de l'année 2008 (car j'ai plusieurs années d'historique).

    Ce qui donne un filtre : Annee=2008 et semaine=29 => la ca fonctionne.

    Mais si je mets Annee=2008 et semaine=1 => La je n'aurais que la premiere semaine 2008 et non pas les 4 dernières semaine de 2007...
    Bien sûr que si !
    Je l'ai testé avec semaine = 2 et nombre de semaines = 5
    J'ai pris le parti de considérer que la semaine se choisissait sur l'année de la date system.
    On peut tout à fait concevoir d'ajouter une invite pour l'année
    On aurait ainsi trois invites :
    • Quelle semaine ?
    • De quelle Année ?
    • Combien de semaines en arrière ?
    Pour ce qui est du départ de semaine le lundi, et si tu veux dire que la date de début de la première semaine de l'année est la date du premier lundi de l'année, donc le 07/01/2008, il suffit de remplacer la date du premier jour de l'année par la date du premier lundi de l'année qui est égale à :
    1er jour de l'année + (7 - jour de semaine du 31/12/N-1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    trunc(sysdate,'year')+(7-to_char(trunc(sysdate,'year')-1,'d'))
    En ajoutant (7jours x numéro de semaine fournie en invite)
    on obtiendra la date du dernier jour de la semaine voulue comme borne 2

    Allez résumons ...1ère condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Table.Date <= 
    (
    trunc(sysdate,'year') + 
    (7 - to_char(trunc(sysdate,'year') -1,'d')
    ) 
    + @Prompt('Quelle semaine ?','N',,mono,free) *7)
    2ème condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AND 
     
    Table.Date >=   
    (
    (trunc(sysdate,'year') + 
    (7-to_char(trunc(sysdate,'year')-1,'d')
    )
    + @Prompt('Quelle semaine ?','N',,mono,free) *7) 
    - (@Prompt('Combien de semaines en arrière ?','N',,'mono, free)*7)
    )
    et avec trois invite ...
    1ère condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Table.Date <= 
    (
    trunc(to_date(@Prompt('Année ?','A',,mono,free),'yyyy'),'year') + 
    (7 - 
    to_char(
    trunc(to_date(@Prompt('Année ?','A',,mono,free),'yyyy'),'year') 
    -1, 'd')
    ) 
    + @Prompt('Numéro de semaine','N',,mono,free) *7)
    2ème condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    AND 
     
    Table.Date >=   
    (
    (trunc(to_date(@Prompt('Année ?','A',,mono,free),'yyyy'),'year')
     + 
    (
    7 
    - to_char(
    trunc(to_date(@Prompt('Année ?','A',,mono,free),'yyyy'),'year'))-1,'d')
    )
    + @Prompt('Numéro de semaine','N',,mono,free)*7) 
    - (@Prompt('Combien de semaines ?','N',,'mono, free)*7))
    Soyons fou

    Précision importante : La complexité de cette solution est imposée par la Version 5 .
    Dans les versions suivantes il faut utiliser une Table dérivée qui produise les dates à retenir et la joindre par une jointure simple à la table de faits.

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    bon bah je n'arrive pas a obtenir le bon résultat parce que du coup, si je demande la semaine 29, j'obtiens les semaines : 26,27,28,29,30,31.
    alors que j'aimerais impérativement que ça s'arrête à la semaine 29 (complète) et je veux les semaines précédentes c'est à dire : 25,26,27,28,29 en tout.

    En fait, c'est la 1ere semaine ds ce cas là qui gène...car elle les décale.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Sommer sur 4 semaines précédentes à cheval sur 2 années
    Par ostrich95 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 01/04/2014, 10h18
  2. [CR XI] Initialiser des champs de saisie par la semaine précédente
    Par juju05 dans le forum Formules
    Réponses: 1
    Dernier message: 29/05/2013, 19h17
  3. Select where date semaine précédente
    Par olibara dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/11/2010, 17h57
  4. [AC-2000] Requette sur semaine précédente
    Par metallicavid dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/02/2010, 17h18
  5. Réponses: 7
    Dernier message: 17/07/2008, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo