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

Discussion :

Etat au dernier jour de chaque mois [DeskI XiR2]

  1. #1
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Etat au dernier jour de chaque mois
    Bonjour à tous,

    Je fais appel à vos connaissances car j’ai écumé de nombreux posts sans trouver de réponses à ma question…
    Je travaille sur Deski XiR2 dans un univers Ressources Humaines, et dans de nombreuses requêtes j’ai besoin sur un même tableau d’observer, au dernier jour de chaque mois, les différents éléments relatifs à la carrière d’un agent : par exemple, son type de contrat de travail, son poste, sa classification…

    Exemple sur le type de contrat de travail :

    ____________31/01/11____ 28/02/11____31/03/11
    Agent 001 : ___CDD_________CDD_________CDI
    Agent 002 : _STAGIAIRE______CDD_________CDI


    En admettant que je souhaite monter la requête à partir de l’exemple précédent, j’ai à ma disposition les dimensions suivantes :
    - Matricule
    - Nom
    - Prénom
    - Type de contrat
    - Date de début de contrat
    - Date de fin de contrat

    Mais aucun indicateur, seulement des informations alphanumériques à retrourner.
    Je précise que j’ai à ma disposition le Designer. J’ai d’ailleurs réalisé un calendrier par le biais d’une table dérivée et ajouté les dimensions ‘JOURID’, ‘ANNEE’, ‘MOIANNEE’… comme expliqué dans un autre sujet, mais je dois être bien loin du chemin à suivre car le résultat est proche de néant.
    Je ne suis même pas sûr de l’utilité d’avoir créé une telle table, n’ayant pas su à quoi relier le champ ‘JOURID’ dans la jointure externe…
    D’avance un grand merci pour aide !

  2. #2
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Bonjour,

    Bon point : tu as tous les éléments pour obtenir ce que tu souhaites (ou presque).

    En fait, la table calendrier sera très utile dans ce cas, mais il faudra s'assurer de plusieurs choses :
    • Que celle-ci couvre une période suffisamment grande. La rendre dynamique pourrait être intéressant
    • Il faudra créer un nouveau champ de cette table permettant d'identifier le dernier jour du mois.
    • Créer une jointure entre cette table calendrier et la table précisant les dates de débuts et de fin de contrat, avec la formule JOUR_ID BETWEEN DATE_DEBUT AND DATE_FIN

    Cela fait, il faudra dans la requête, sur BO, filtrer les derniers jours de mois (à partir du nouveau champ dans la table calendrier)
    Et dans les objets de résultat, il faudra ramener l'identifiant de l'employé, JOUR_ID, ainsi que le type de contrat.

    Il ne restera plus ensuite qu'à créer le tableau croisé.
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  3. #3
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup de cette réponse rapide!

    Etant plutot novice dans le maniement du langage SQL, je sèche un peu devant la tâche à accomplir...

    Pour créer ma table dérivée, j'ai utilisé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    to_date('20110101','yyyymmdd') + (rownum - 1) AS JOURID, 
    to_date('01'||to_char(to_date('01012011','dd/mm/yyyy') + (rownum - 1), 'mmyyyy'),'dd/mm/yyyy') AS MOISANNEE,
    to_char(to_date('01012011','dd/mm/yyyy') + (rownum - 1), 'mm') AS MOIS, 
    to_char(to_date('01012011','dd/mm/yyyy') + (rownum - 1), 'yyyy') AS ANNEE 
    FROM dual 
    connect BY to_date('20110101','yyyymmdd') + (rownum - 1) <= to_date(to_char(add_months(sysdate,-1),'yyyy')||'1231','yyyymmdd')
    - Comment y ajouter une fonction 'DernierJourDuMois' sans erreur ? (LAST_DAY en SQL?)
    - il parait effectivement très interessant de la rendre dynamique, afin d'interroger les années précédentes! j'ai pu déduire qu'il fallait utiliser une fonction SYSDATE, mais toujours pareil, mon manque de technicité dans le domaine me bride rapidement...

  4. #4
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    En fait, la formule est déjà dynamique (il est fort ce Bruno )
    Elle part du 01/01/2011 jusqu'au 31/12 de l'année en cours.

    Donc, si tu veux qu'elle commence plus tôt, il faut changer toutes les occurrences de "20110101" pour y appliquer l'année de ton choix.

    Ensuite, pour le dernier jour du mois, il faut effectivement rajouter une fonction last_day :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    to_date('20110101','yyyymmdd') + (rownum - 1) AS JOURID,
    to_date('01'||to_char(to_date('01012011','dd/mm/yyyy') + (rownum - 1), 'mmyyyy'),'dd/mm/yyyy') AS MOISANNEE,
    to_char(to_date('01012011','dd/mm/yyyy') + (rownum - 1), 'mm') AS MOIS,
    to_char(to_date('01012011','dd/mm/yyyy') + (rownum - 1), 'yyyy') AS ANNEE,
    last_day(to_date('20110101','yyyymmdd') + (rownum - 1)) AS DERNJOURMOIS
    FROM dual
    connect BY to_date('20110101','yyyymmdd') + (rownum - 1) <= to_date(to_char(add_months(sysdate,-1),'yyyy')||'1231','yyyymmdd')
    Ensuite donc, dans ton rapport BO, il faudra créer une condition dans ta requête avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOURID Egal à (Objet) DERNJOURMOIS
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  5. #5
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    On progresse!! Le résultat obtenu n'est encore pas tout à fait celui escompté : l'Univers sur lequel je travaille est de type 'historique', c'est à dire qu'il retourne toute la chronologie des éléments d'une carrière d'un salarié.
    Dans notre cas, les types de contrat :

    Par exemple, pour 'Monsieur MACHIN', qui était en CDD du 01/01/2011 au 31/03/2011, puis en CDI à compter du 01/04/2011, il retourne les données sous cette forme :

    __________________31 janv___28 fev__31 mars__30 avr___31 mai___30 juin ...
    Monsieur MACHIN_____CDD_____CDD_____CDD_____CDD_____CDD_____CDD ...
    Monsieur MACHIN_____CDI______CDI_____CDI______CDI_____CDI______CDI ...

    au lieu de :

    __________________31 janv___28 fev__31 mars__30 avr___31 mai___30 juin ...
    Monsieur MACHIN_____CDD_____CDD_____CDD_____CDI_____CDI_____CDI ...


    Dans les conditions de la requête, lorsque j'ajoute : <Date de fin de contrat> 'Non renseigné', il me retourne les données sous cette forme :

    __________________31 janv___28 fev__31 mars__30 avr___31 mai___30 juin ...
    Monsieur MACHIN_____(vide)___(vide)___(vide)_____CDI_____CDI_____CDI ...

    Merci de ton aide!

  6. #6
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Tu as bien créé la jointure entre la table calendrier et la table des infos employés ?
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  7. #7
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Oui, sous cette forme la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CALENDAR.JOURID between RHB_AGT_POS.DATEDEBUT and RHB_AGT_POS.DATEFIN...

  8. #8
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Mmmmm... C'est bizarre. A la rigueur, il t'aurait renvoyé ça :

    __________________31 janv___28 fev__31 mars__30 avr___31 mai___30 juin ...
    Monsieur MACHIN______CDD_____CDD_____CDD_____(vide)___(vide)___(vide)...
    Monsieur MACHIN_____(vide)___(vide)___(vide)_____CDI_____CDI_____CDI ...

    ... J'aurais compris. Mais là, on dirait qu'il ne prend pas en compte la jointure. Peux-tu vérifier si l'univers a bien été sauvegardé, s'il n'y a pas un chevauchement dans les périodes dans la table pour Monsieur Machin et enfin, peux-tu quitter et relancer BO avant de ré-exécuter ta requête ?
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  9. #9
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Bien vu, après redémarrage il retourne les données comme tu viens de l'écrire !

    __________________31 janv___28 fev__31 mars__30 avr___31 mai___30 juin ...
    Monsieur MACHIN______CDD_____CDD_____CDD_____(vide)___(vide)___(vide)...
    Monsieur MACHIN_____(vide)___(vide)___(vide)_____CDI_____CDI_____CDI ...

  10. #10
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    OK, on touche au but.

    En fait, il te crée deux lignes car il y a plusieurs lignes pour chaque employé et que <Type de contrat> est une dimension.

    Pour palier le problème, dans le corps de ton tableau, remplaces :
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Max(<Type de contrat>)
    Je sais, c'est tarabiscoté...
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  11. #11
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Tordu, mais vraiment efficace!!! Quel talent...
    Dernière petite interrogation : Avec un objet dimension on peut effectuer des regroupements.

    Pour faire la même chose avec un indicateur, je suis obligé de passer par des 'Si ... DansListe...Alors...Sinon' ?

    Ou est-il possible d'effectuer le groupement en premier : <REGR_type de contrat>, puis de faire un Max.(<REGR_type de contrat>) ?

  12. #12
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Je te conseille la deuxième solution : d'abord faire le regroupement sur ta dimension et ensuite utiliser le Max().

    En fait, ici tu peux le faire comme ça car il s'agit d'un "faux" indicateur, il est créé uniquement à cause du max.

    Mais si l'objet d'origine était un indicateur (défini comme cela dans l'univers), il aurait fallu passer par Si..Alors..Sinon
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  13. #13
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    C'est du grand art... ça fonctionne parfaitement.
    Encore un grand merci pour ton aide!

  14. #14
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Une petite dernière pour la route...

    Voyant que cela fonctionnait avec la table 'type de contrat', j'ai voulu faire de même avec les différentes tables composant les caractéristiques d'un salarié, comme par exemple les tables 'temps de travail', 'service' ou encore 'poste' (chacune possédant à peu près les mêmes champs : type de..., date de début..., date fin...)

    Pour chacune, j'ai effectué la même jointure que sur le modèle précédent (between...and...) sur la table 'CALENDAR', mais à l'exécution de la requête, il me retourne le message d'erreur suivant :

    'Erreur lors de la génération du SQL : Combinaison incompatible d'objet (QP0004)'

    Où est l'erreur?

  15. #15
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Le problème vient du fait de tout mettre dans une seule requête : sans doute y a-t-il des boucles dans l'univers.

    Dans ce cas deux choix :
    • Soit créer une table calendrier pour chaque table à étudier (avec autant d'objets)
    • Soit créer une requête différente pour chacune de tes approches, quitte à les lier ensuite afin de croiser les résultats
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  16. #16
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion RH
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôleur de gestion RH
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Je vois le problème, et je penche pour la deuxième solution...
    Encore merci!!!

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

Discussions similaires

  1. [AC-2010] Dernier jour de chaque mois
    Par Tytelle dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/04/2012, 11h48
  2. Réponses: 3
    Dernier message: 06/09/2006, 17h22
  3. Réponses: 26
    Dernier message: 01/07/2006, 13h14
  4. dernier jour d'un mois comme oracle
    Par looc 6699 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/11/2005, 11h09
  5. Comment connaître le dernier jour d'un mois donné ?
    Par Le Pharaon dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 11/07/2005, 10h48

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