|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre expérimenté
![]() Inscription : juillet 2008 Messages : 757 ![]() |
Bonjour,
On m'a demandé récement de faire un rapport avec un objet sur 12 mois flottant a comparer avec les 12 mois flottants précédents J'ai fais ca Code :
Et j'ai fais un autre objet similaire pour l'année d'avant (meme formule, mais on fait -1 a toute les années) Le code m'avait l'air lourd et peu élégant, mais je suis hélas tres peu compétente en SQL (a dire vrai, c'est plutot de la logique excel, sauf qu'en excel, d'une part, c'est tres facile de recomposer une date, et d'autre part, il gere tout seul les dépassements) mais ca marchait bien Le probleme, c'est que le destinataire du rapport est extrement content du résultat (bon, ca en soi, c'est plutot chouette C'est a dire qu'il voudrait un tableau avec en colonne 1, le total de chiffre d'affaire sur les douze mois précédent la date, et puis en colonne 2, les 12 mois précédents le mois précédent, ... Donc par exemple, il voudrait en colonne 1 le chiffre d'affaire de mars 2010 à février 2011 , en colonne 2 le chiffre d'affaire de février 2010 à janvier 2011, en colonne 3, le chiffre d'affaire de janvier 2010 à décembre 2010, en colonne 4, le chiffre d'affaire de decembre 2009 à novembre 2010, ... Et des colonnes, il en voudrait 18 (et évidement, tout relatif a un seul prompt de date, sinon ca sera pas pratique) Du coup, mon code que je trouvais déja pas joli, je le regarde d'un oeil noir, parce que la seule facon d'obtenir ca avec le modele du code que j'ai fais, c'est de faire 18 objets et ca m'a l'air d'une idée idiote J'ai un acces admin a l'univers, je peux creer des nouvelles tables SQL (a condition que ca soit simple :p), l'univers dispose d'une table calendrier qui a les colonnes suivantes day_date smalldatetime year_id float year_nr nvarchar(50) qtr_nr decimal(18, 0) month_nr decimal(18, 0) week_nr decimal(18, 0) day_nr float month_name nvarchar(50) day_name nvarchar(50) quarter_name nvarchar(50) month_id nvarchar(50) month_year nvarchar(50) short_month_name varchar(50) day_datetime datetime Legal_holiday varchar(50) date_char varchar(50) EndMonth_Date smalldatetime BeginMonth_Date smalldatetime FY_Dec_Nov varchar(50) FY_Apr_March varchar(50) FY_Oct_Sept varchar(50) Je ne peux par contre ni suprimer ni alterer ce qui existe (l'univers n'est pas le mien a la base, je ne peux pas le casser, si je veux ajouter des trucs je peux, mais je ne peux pas décider que cette table la, sa tete ne me revient pas et que je le vire) Qu'est-ce que je peux faire de futé avec tout ca? Idéalement, pas 18 objets en tout cas L'objet month_year se présente sous la forme suivante "6/2011", est-ce ca serait une bonne idée de m'en servir pour faire un join avec une nouvelle table qui serait un add on a la table calendrier (j'ai peur de faire une bétise en essayant de lui ajouter des colonnes) qui pour chaque combinaison mois/année aurait, dans deux colonnes, une date de début et une date de fin Et ensuite, je ferrais un objet objet qui prendre le chiffre d'affaire entre ces deux dates et je pourrais, dans un tableau croisé, avoir pour chaque mois, le chiffre d'affaire sur les deux mois précédents. Ca marcherait? Et surtout, est-ce que ca serait une bonne idée, ou est-ce que je suis entrain de chercher midi a 14h? En espérant que j'ai réussi a expliquer correctement ce que j'ai et de quoi j'ai besoin Et merci beaucoup a ceux qui prendront un peu de leur temps pour réfléchir avec moi a ce sujet Emmanuelle |
||
|
|
00
|
|
|
#2 |
![]() ![]() Julien LizzulInscription : mars 2008 Messages : 1 103 ![]() |
Salut,
J'avoue ne pas avoir tout lu concernant ta méthode Si tu as accès au designer, est ce que tu ne pourrais pas juste créer un objet Mois Année Précédente qui te ramènerait par exemple pour 01/01/2010 : 01/01/2009 (basé sur la table calendrier)? L'idée est de filtrer dans le rapport : Code :
somme([TonObjet] WHERE ([TaDate] Entre [Mois Année] AND [Mois Année Précédente]) Concernant le prompt, je dirais qu'il en faut 2 : L'un sur calendrier : Code :
Mois Année BETWEEN @prompt('Quel mois ?','A',,mono,free,) AND add_months(@prompt('Quel mois ?','A',,mono,free,),-18) Code :
TaDate BETWEEN @prompt('Quel mois ?','A',,mono,free,) AND add_months(@prompt('Quel mois ?','A',,mono,free,),-30) Dans l'idée, je pense que ca pourrait marcher. Par contre, je l'ai fait pour de l'Oracle, donc le code sera à adapter à ton SGBD. A mon avis, il y'aura quelques modifs à effectuer sur ce que j'ai dit, donc reviens vers nous quand tu auras fait les tests pour remonter le résultat obtenu. Bon courage
__________________
|
|
|
00
|
|
|
#3 |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 168 ![]() |
Bonjour,
C'est quoi au juste ta Base de données ... SQL Server ? Et est ce que l'invite est obligatoire pour pouvoir choisir la date de départ de ce glissement de mois en mois vers l'arrière? ou bien peut on prendre la date du 1er jour du mois en cours ?
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Inscription : juillet 2008 Messages : 757 ![]() |
c'est du SQL 2005
L'invite serait un plus apprécié (c'est pas une boite chiante, si on leur dit que c'est le premier du mois et puis c'est tout, ils seront d'accord, mais ca serait plus pratique avec une invite) Je n'ai pas encore eu le temps de tester mais je pense avoir trouvé la formulation dont j'avais besoin pour retirer des mois Code :
DateAdd(m, -12, CONVERT(DATETIME, {fn CURDATE()}, 102)) Merci pour les idées en tout cas |
|
|
00
|
|
|
#5 |
|
Membre expérimenté
![]() Inscription : juillet 2008 Messages : 757 ![]() |
Bon, je me sens stupide, mais je n'y arrive pas
J'ai ajouté une table qui contient 3 colonnes : - un champ month_year nvarchar(50) (qui contient des éléments de la forme "3/2011") qui sert a faire la liaison avec ma table de calendrier et dont j'aimerais bien faire des titres de colonnes - un champ months_12_before smalldatetime (par exemple, pour 3/2011 ca donne 1/04/2010 0:00:00) - un champ last_month smalldatetime (par exemple pour 3/2011 ca donne 31/03/2011 0:00:00) J'ai ajouté dans l'univers les 3 champs (le champs month_year n'avait pas encore d'objet dans l'univers) et j'ai dans l'univers un objet Day_date qui est basé sur ma table calendrier. Je pensais que j'avais toutes les pieces du puzzle, mais je n'arrive pas a les assembler Si je met dans un rapport mes 3 objets et mon turnover, ca me fait 2 table différentes alors que je m'attendais a avoir une répartition du turnover par période Si je vais voir le code SQL généré, il fait deux select. Et si j'essaye de le faire directement en sql server, il me pond un COLLATE. Est-ce que c'est ca le probleme? j'ai mal fait quelque chose en générant ma table? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com