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
Pour résumer, je demande une date a l'utilisateur, je la manipule pour en faire le premier jour du mois suivant et le premier jour du mois selectionnée mais l'année passée (en faisant un traitement différencier si c'est décembre ou non, pou rne pas avoir de bug en essayant de manipuler un mois n°13) et je prend un chiffre d'affaire qui est entre ces deux bornes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 sum(CASE WHEN (@Select(TIME\Day Date) <(CASE WHEN (month(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free)) =12) THEN (CONVERT(DATETIME,CONVERT(char, 1+year(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free))) +'-'+CONVERT(char, 1) +'-'+CONVERT(char, 1), 102)) ELSE (CONVERT(DATETIME,CONVERT(char, year(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free))) +'-'+CONVERT(char, 1+month(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free))) +'-'+CONVERT(char, 1), 102)) END) and @Select(TIME\Day Date)>=(CASE WHEN (month(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free)) =12) THEN (CONVERT(DATETIME,CONVERT(char, year(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free))) +'-'+CONVERT(char, 1) +'-'+CONVERT(char, 1), 102)) ELSE (CONVERT(DATETIME,CONVERT(char, year(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free))-1) +'-'+CONVERT(char, 1+month(@Prompt('Type in the last day like dd/mm/YYYY','d','TIME\Day Date',mono,free))) +'-'+CONVERT(char, 1), 102)) END) ) THEN @Select(REFERENCES\CA FAC) ELSE 0 END)
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) et que maintenant, il voudrait un nouveau rapport avec des objets de ce type, mais par mois
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
Partager