Bonjour j'ai BO6.5, j'aimerais savoir est ce que c possible de faire un indicateur dans designer qui soustrait une date pour deux conditions différentes
Merci
Version imprimable
Bonjour j'ai BO6.5, j'aimerais savoir est ce que c possible de faire un indicateur dans designer qui soustrait une date pour deux conditions différentes
Merci
exemple STP ?
En fait il s'agit d'un seul et même objet "date" que je voulais scinder en deux pour 2 conditions :
date1 pour l'activité 1
date 2 pour l'activité 2
Je veux savoir tout simplement le temps écoulé entre l'activité 1 et 2 ?
Il nous faut savoir sur quelle règle tu te bases pour identifier Activité1 et Activité2.
Et puis dis-nous également quel SGBD tu utilises...
En fait je sais que c'est pas lié au SGBD (ORACLE 9i).
Et les activités c'est un deuxième objet , plus clairement:
Cas Date Activité
001 01/09/07 13:12:45 1
001 02/09/07 09:00:00 6
001 05/09/07 12:30:56 2
002
003
.
.
.
Je veux savoir le temps moyen en jours et en heures que passe chaque cas entre l'activité 1 et 2 ?
SI je comprends bien et si c'est toujours entre 1 et 2, la solution n'est pas dans Designer mais dans Reporter.
Tu pourrais faire une rupture par cas et dans le pied de rupture faire une formule du genre =JoursEntre(Max(Date) où (Activité=1),Max(Date) où (Activité=2))
et à la fin de ton tableau faire la moyenne de cette formule. Cela te donnera le nombre de jours moyen.
Je ne garantis pas la syntaxe exacte, je n'ai pas BO sous la main...
Je te remercie beaucoup.
En fait j'avais essayé cette solution mais sans le "Max" et j'avais toujours une erreur.
Maintenant, le JoursEntre me donne l'écart en jour. Je veux l'écart en heures aussi.
Je veux savoir si dans la version 6 de BO, il y a moyen d'obtenir un écart de date en heures????
Par exemple :
16/09/2007 21:00:00
17/09/2007 09:00:00
L'écart est de : 12 Heures (et non pas 1 jour)
Je ne vois pas de fonction prédéfinie pour cela (JoursEntre : écart en jours)
Pourquoi ça ne marche pas avec Decode.
J'ai fait dans designer un objet décrit comme suit :
decode(WF_ACTIVITY_LOG.ACTIVITY_ID,'ACT-477',to_date(WF_ACTIVITY_LOG.DATE_CREATED,'DD-MM-YYYY HH24 :MI:SS'),null)-decode(WF_ACTIVITY_LOG.ACTIVITY_ID,'ACT-244',to_date(WF_ACTIVITY_LOG.DATE_CREATED,'DD-MM-YYYY HH24 :MI:SS'),null)
L'analyse est réussi de cet objet. Mais dans Business Object il me donne erreur dans le SQL
Pourquoi?
Comment WF_ACTIVITY_LOG.ACTIVITY_ID peut il être à la fois (pour un même enregistrement) égal à 'ACT-477' et égal à 'ACT-244' ???
Erreur de frappe dans le nommage de deux champs differents ou bien deux dates sur deux enregistrements différents identifiables par WF_ACTIVITY_LOG.ACTIVITY_ID ?
Merci pour m'avoir répondu,
Il y a deux enregistrements: La date de création de l'activité ACT-477 et la date de création de l'activité ACT-244.
L'objet créé est une soustraction de ces deux dates mais je n'arrive pas à l'exécuter.
C'est bien ce que je pensais 2 enregistrements et non pas 2 champs
Ne sachant pas à quel DonnéeID se rapportent ces dates je vais supposer qu'il sagit des dates de ID
Soit
une table A listant ces ID
et
une table B contenant au moins 2 champs :
ID et WF_ACTIVITY_LOG.ACTIVITY_ID
Tu pourrais créer deux jointures de A ver B1
C'est à dire de A vers B et de a vers B2 (Alias)
Pourquoi ?
Parce que A1 comportera une jointure restrictive WF_ACTIVITY_LOG.ACTIVITY_ID = 'ACT-244',
et A2 une jointure restrictive
WF_ACTIVITY_LOG.ACTIVITY_ID = 'ACT-244',
en reliant A.ID=B1.ID(+) ET A.ID=B2.ID(+)
Tu pourras créer ta formule.
Excuse moi, mais je n'ai pas très bien compris.
Comme on est arrivé là, j'aimerais t'expliquer mieux:
En fait j'ai toutes les données dans la même table WF_ACTIVITY_ID, Ok.
Cette table contient le champ ID, Date_Created, Activity_ID et d'autres champs.
Je veux calculer pour chaque ID, le temps écoulé entre l'activité ACT-477 et ACT-244
Je n'ai pas compris pourquoi, je dois faire des jointure pour pouvoir établir la formule?
Comme les dates que tu veux calculer le temps écoulé entre l'activité ACT-477 et ACT-244 qui correspondent à deux enregistrements distincts !!! tu ne peux pas.
Donc tu garde dans ton univers ta table WF_ACTIVITY_ID puisqu'elle contient d'autres champs dont tu peux avoir besoin pour d'autres objets.
1) Dans le Menu Insertion tu choisis Tables Dérivées
2) Tu tapes le SQL suivant :
3) Tu nommes cette Table Dérivée ACT_477Code:
1
2 SELECT ID, Date_Created, Activity_ID WHERE Activity_ID = 'ACT-477 '
4) Tu crées une jointure externe entre la table WF_ACTIVITY_ID et la table Dérivée ACT_477
5) Dans le Menu Insertion tu choisis Tables DérivéesCode:WF_ACTIVITY_ID.ID = ACT_477.ID(+)
6) Tu tapes le SQL suivant :
7) Tu nommes cette Table Dérivée ACT-244Code:
1
2 SELECT ID, Date_Created, Activity_ID WHERE Activity_ID = 'ACT-244'
8) Tu crées une jointure externe entre la table WF_ACTIVITY_ID et la table Dérivée ACT_244
9) Maintenant tu peux créer 3 objetsCode:WF_ACTIVITY_ID.ID = ACT_244.ID(+)
DateHeureACT-244 Select: ACT_244.Date_Created
DateHeureACT-477 Select: ACT_477.Date_Created
Durée Select: decode(ACT_477.Date_Created, NULL,NULL,decode(ACT_244.Date_Created,NULL,NULL, ACT_477 - ACT_244))
Tu devrais essayer et me dire ....
J'ai essayé les tables dérivées mais j'ai des doublons.
Par exemple :
Pour ID j'ai 2 dates D1, D2 pour ACT-477 et 2 dates de création T1, T2 pour ACT-244. (Le parcours entre l'activité ACT-477 et ACT-244 a été effectué 2 fois : D1->T1 et D2->T2)
En suivant à la lettre ce que tu m'as recommandé j'ai :
ID D1 T1 (T1-D1) (Bon)
ID D1 T2 (T2-D1) (Non voulu)
ID D2 T1 (T1-D2) (Non voulu)
ID D2 T2 (T2-D2) (Bon)
Même avec les jointures restrictives j'ai le même problème.
Ca tu ne nous l'avais pas dit que tu pouvait avoir deux dates D1 D2 pour un même ID
ID ne peut donc suffire comme identifiant UNIQUE !
il te faut donc trouver un champ de plus qui concaténé avec ID permettra une jointure sans doublons vers les deux tables dérivées (dans lesquelles tu dois également ajouter ce champ concaténé.
Exemple si tu as un champ Numéro sorte de numéro qui permet pour un ID de différencier les Activités.
Tu dois ajouter dans les tables dérivées
Ce qui te permettra de modifier les jointures de la façon suivanteCode:
1
2
3
4 SELECT ID || to_char(Numéro,'0') AS MonID, ID, Date_Created, Activity_ID WHERE Activity_ID = 'ACT-477 ' SELECT SELECT ID || to_char(Numéro,'0') AS MonID, ID, Date_Created, Activity_ID WHERE Activity_ID = 'ACT-244'
Code:WF_ACTIVITY_ID.ID || to_char(WF_ACTIVITY_ID.Numéro,'0') = ACT_477.MonID(+)
Je te remercie beaucoup BRUNO2R pour ton aide.
Mais, Est ce qu'il y a une solution plus simple que concaténer l'ID avec une chaine. Ca ne marche dans mon univers.
Dans la table en question où j'aimerais calculer cet écart, a comme ID comme PK et activity_ID comme FK. il y a aussi la date de création de l'activité qui permet de différencier les enregistrements.
Est ce que ça peut marcher avec des alias même si je crois que ça va être la même histoire(des doublons...)