Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Designer
Designer Forum d'entraide Designer (création d'univers, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2011, 11h28   #1
Membre expérimenté
 
Inscription : juillet 2008
Messages : 757
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 757
Points : 545
Points : 545
Par défaut Du 12 mois flottant mois par mois?

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 :
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)
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

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
EmmanuelleC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 16h27   #2
Modérateur
 
Avatar de Julien59
 
Julien Lizzul
Inscription : mars 2008
Messages : 1 103
Détails du profil
Informations personnelles :
Nom : Julien Lizzul
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2008
Messages : 1 103
Points : 1 295
Points : 1 295
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])
En entête de colonne, tu mettrais [Mois Année].

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)
L'autre sur TaDate :
Code :
TaDate BETWEEN @prompt('Quel mois ?','A',,mono,free,) AND add_months(@prompt('Quel mois ?','A',,mono,free,),-30)
30 étant égal à 18 (le nombre de mois affiché) + 12 (le nombre de mois glissants)

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
__________________
  • Pensez à consulter la FAQ BO
  • Quand votre problème est solutionné, n'oubliez pas de cliquer sur le bouton
Julien59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 16h29   #3
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 168
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 168
Points : 2 702
Points : 2 702
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 !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 16h08   #4
Membre expérimenté
 
Inscription : juillet 2008
Messages : 757
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 757
Points : 545
Points : 545
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))
Des que je trouve 2h pour bosser la dessus, j'essaye de mettre en pratique ce que tu propose Julien.

Merci pour les idées en tout cas
EmmanuelleC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 12h01   #5
Membre expérimenté
 
Inscription : juillet 2008
Messages : 757
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 757
Points : 545
Points : 545
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?
EmmanuelleC est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h23.


 
 
 
 
Partenaires

Hébergement Web