Bonjour à tous et à toutes,
Comment fait on pour afficher tous les jours d'un mois passé en paramètre avec date_debut et date_fin dans une crosstab.
Merci d'avance pour votre aide
Bonjour à tous et à toutes,
Comment fait on pour afficher tous les jours d'un mois passé en paramètre avec date_debut et date_fin dans une crosstab.
Merci d'avance pour votre aide
C'est au niveau de la construction de ton dataset que ça va se jouer. Si tu veux voir affiché chaque jour, tu devras avoir une ligne de dataset au moins par jour, avec une date correspondant au jour.
Ton besoin a plus l'air d'un graphique que d'un data cube. Tu veux faire quoi, simuler un calendrier ?
Oui en quelque sorte je voudrai simuler un calendrier. J'ai eu se besoin à plusieurs reprise lorsque je veux faire des statistiques sur un mois complet. (cf. ici)
Bon, bah tu es bon pour changer ton modèle de données.
Tu vas devoir insérer une ligne pour chaque jour entre tes dates, avec la date correspondant quelque part et des valeurs nulles dans les autres champs.
Car on ne peut pas afficher des lignes relatives à un groupe sur une valeur de champ si cette valeur n'existe pas dans le jeu de données.
Bon courage.
Je ne m'y connais pas assez en scripting javascript ou SQL pour te proposer une solution. Personnellement j'utilise des dataset alimentés en java (cia les Scripted Data Sources et les Data Set Event Handlers), et en java ce serait assez facile, mais si tu n'as pas ce genre d'architecture en place ca serait couteux de le faire juste pour ça.
Tu vas devoir fouiller. Tu peux aussi demander de l'aide sur le forum anglophone, ils sont plus nombreux et plus compétents là bas (sur birt-exchange).
Bon courage.
D'accord je vais essayer sur birt-exchange!
Merci pour ton aide
Si VRAIMENT tu n'as pas de solution, tu peux tenter cet énorme bidouillage qui consiste à construire un calendrier mensuel à la main.
Je m'explique :
- Tu fais un tableau avec un groupe sur la date, groupé par mois (il faut au minimum une date dans le mois pour qu'il s'affiche).
- Dans la ligne de group header, tu mets un autre tableau. Ce sous-tableau est constitué de 5 lignes et 7 colonnes.
- Tu filtres les données du sous-tableau en fonction du mois actuel de ton super-tableau.
- Dans chaque case du sous-tableau, tu mets une agrégation sur la donnée que tu veux afficher (somme de quantité, comptage de dates, etc).
- Sur CHAQUE agrégation, tu mets un filtre de date correspondant au jour de la case :
- Un filtre sur le jour de la semaine, indentique pour chaque case d'une même colonne (lundi pour la première, mardi pour la seconde, etc) ;
- Un filtre sur le jour du mois, identique pour chaque ligne (première ligne, entre 1 et 7 ; deuxième, entre 8 et 15 ; etc).
Tu as ton calendrier. Je sais, c'est pourri, c'est la vie
Edit :
A vrai dire, tu n'as pas besoin de faire de sous-tableau : fais juste 5 lignes de group header dans ton premier tableau et construis ton calendrier dedans directement.
Merci, je vais tout de même essayer de trouver une solution avec une cross tab afin d'avoir tout les jours sur une seul ligne.
Cependant, je vais tout de même essayer ce que tu me propose par curiosité![]()
Le principe est le même, tu vas avoir une ligne de 31 cases et un filtre sur le jour du mois.
Tu me diras ce que ça aura donné.
Bon courage.
Bonjour
Exemples de Script SQL (Oracle) permettant de lister tous les jours entre 2 dates
L'idée étant de faire son select sur une table relativement grosse en nombre de lignes et pouvant contenir l'ensemble des jours à générer
Autre méthode moins gourmande en ressources car elle n'utilise pas de table du modele
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT TO_DATE ('MaDatedeDebut', 'dd/mm/yyyy') + ROWNUM -1 AS jour FROM commandes WHERE ROWNUM <= TO_DATE ('MaDatedeFin', 'dd/mm/yyyy') - TO_DATE ('MaDatedeDebut', 'dd/mm/yyyy') + 1
Peut-être s'en inspirer si vous n'utilisez pas Oracle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT LEVEL + to_date('01/01/2009', 'dd/mm/yyyy') - 1 as jour FROM dual CONNECT BY LEVEL < to_date('01/02/2009', 'dd/mm/yyyy') - to_date('01/01/2009', 'dd/mm/yyyy') + 1
J'espere que cela pourra aider.
Merci pour cette réponse.
Cependant, je n'utilise pas Oracle et ceci ne fonctionne pas lorsque je l'execute (TO_DATE n'existe pas, ROWNUM impossible a definir,...)
Merci tout de même car ceci pourrait me servir une autre fois![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager