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/09/2008, 17h32   #1
Membre du Club
 
Inscription : mai 2005
Messages : 91
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 91
Points : 40
Points : 40
Par défaut [5.1.6] Sélection données historisées

Bonjour,

J'utilise Designer 5.1.6.

J'ai une table T1 avec les champs suivants (C1, C2, C3, C4, DateDeb, DateFin).
La clé primaire est sur les colonnes C1, C2 et DateDeb.

Une historisation a été mise en place et c'est pourquoi la clé porte aussi sur la date de début. Nous avons donc un "empilement" des données en fonction de la clé sur C1 et C2.
J'ai besoin de récupérer la dernière image des champs => cad max(DateDeb)

Ex :
1, 2, 3, 4, 05/08/08, 06/08/09
1, 2, 3, 8, 07/08/08, "empty"
2, 5, 6, 7, 02/02/08, 03/07/08
2, 5, 8, 9, 04/07/08, 06/07/08
3, 4, 1, 1, 01/01/08, "empty"

Sur ces 5 enregistrements, je voudrais donner la possibilité de récupérer que la dernière image :
1, 2, 3, 8, 07/08/08, "empty"
2, 5, 8, 9, 04/07/08, 06/07/08
3, 4, 1, 1, 01/01/08, "empty"

ou de récupérer l'ensemble des lignes pour avoir l'historique des modifications.

- J'ai pensé aux tables dérivées mais je n'y ai appararemment pas accès avec ma version de BO.
- J'ai pensé à créer un filtre prédéfini (condition) au niveau de la classe correspondante mais je n'arrive pas à construire la clause Where :
car j'ai l'erreur suivante :
Citation:
Fonction de groupe non autorisée ici.
- J'ai pensé à créer un alias de ma table T1 afin de créer deux classes indépendante T1 (toutes les données) et T1c (dernière image).
Mais je n'ai pas réussi à faire une autojointure correcte sur la DateDeb.

J'ai l'impression que ce n'est pas compliqué mais je n'arrive pas à le mettre en place facilement.
Est-ce que vous pourriez m'indiquer vers quelle solution je dois insister ? filtre ou alias ?
Ou bien à quel endroit je dois/peux appliquer la condition max(DateDeb) ?

Si je travaille avec les alias, il faudrait (je pense) que je rajoute la condition :
Code :
SELECT max(DateDeb) FROM T1 WHERE C1.T1 = C1.T1alias AND C2.T1=C2.T1alias
mais je ne vois pas où le placer.

Merci d'avance pour votre aide !
Tux
tux2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2008, 17h39   #2
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 954
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : juillet 2008
Messages : 954
Points : 1 486
Points : 1 486
vois plutot pour mettre un top dans la table, qui serait égal à 1 pour le dernier
il suffit ensuite de mettre un filtre sur top=1

un filtre sur le max( datdeb) est couteux, tu risques d'avoir des problèmes de perf
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2008, 17h47   #3
Membre du Club
 
Inscription : mai 2005
Messages : 91
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 91
Points : 40
Points : 40
Merci pour ta réponse rapide !

Le problème c'est que je n'ai pas le droit de modifier les tables.
Je n'ai pas la main dessus et ce n'est pas envisageable à l'heure actuelle de modifier la structure des tables.

En cas de gros problèmes de performances, j'essaierais de faire passer une évolution dans ce sens mais pas pour le moment... :-(

Le filtre tu le placerais où et comment ? car pour le moment je n'arrive pas à le mettre en place... j'ai l'erreur indiquée dans le premier post.
tux2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2008, 12h19   #4
Membre émérite
 
Avatar de bastoonet
 
Inscription : septembre 2006
Messages : 815
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France

Informations forums :
Inscription : septembre 2006
Messages : 815
Points : 843
Points : 843
Je pense qu'il te faut quelquechose dans ce genre au niveau de la clause WHERE de ton sql....j'ai généré cela en posant une condition égal sur ma date dans BO, puis calcul, puis maximum, pour chaque valeur de ma valeur de référence...ici par exemple c'est pour avoir uniquement le dernier profil en date d'un utilisateur !


WHERE
utilisat_profil.DATE_AFFECTATION = ALL
( SELECT max( utilisat_profil.DATE_AFFECTATION )
FROM
AOSFAC00.OSFQT709 utilisat_profil,
AOSFAC00.OSFQT003 SubAlias__26,
AOSFAC00.OSFQT710 utilisat_structure
WHERE
utilisat_structure.ID_UTILISATEUR=SubAlias__26.ID
AND utilisat_structure.ID_ABONNE=SubAlias__26.ABONNE
AND (utilisat_profil.ID_ABONNE=utilisat_structure.ID_ABONNE
AND utilisat_profil.ID_STRUCTURE=utilisat_structure.ID_STRUCTURE
AND utilisat_profil.ID_UTILISATEUR=utilisat_structure.ID_UTILISATEUR
AND SubAlias__26.ID = utilisateur.ID
GROUP BY
SubAlias__26.ID
)
__________________
~~ bastoonet ~~

"Team BAB - Spécialistes BO"
bastoonet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2008, 14h44   #5
Membre actif
 
Inscription : juillet 2008
Messages : 181
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2008
Messages : 181
Points : 169
Points : 169
Bonjour,

As-tu la possibilité de créer des vues ou de demander à qqun de créer une vue sur la base de données?

La vue serait:

Code :
1
2
3
 
SELECT C1, C2, Max(DateDeb) AS date_max
FROM T1
Ensuite tu rajoutes cette table dans ton univers et tu fais une jointure (INNER JOIN) avec la table T1 initiale sur T1.C1=vue.C1, T1.C2=vue.C2 et T1.DateDeb=vue.date_max.

Ensuite dans les objets il faudra bien veiller à utiliser des objets de la vue pour forcer la jointure (ou sinon forcer la jointure ).
alextoucour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2008, 16h04   #6
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 954
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : juillet 2008
Messages : 954
Points : 1 486
Points : 1 486
sinon dans ton filtre prédéfini tu mets :

T.Datedeb=(SELECT max(DateDeb) FROM schema.table a WHERE T.C1 = a.C1 AND T.C2=a.C2)

avec T= le nom de la table dans Designer ( = nom alias ? )
schema.table = le nom physique

normalement ça marche ( j'ai testé en xi et de mémoire je l'ai fait en 5/6 ), je crois que tu peux le mettre en autojointure si tu le veux en automatique
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2008, 14h52   #7
Membre du Club
 
Inscription : mai 2005
Messages : 91
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 91
Points : 40
Points : 40
J'ai essayé chacun de vos conseils et c'est le dernier que j'ai réussi à mettre en place !

J'ai créé une autojointure sur ma table avec comme expression :
Code :
T.Datedeb=(SELECT max(DateDeb) FROM schema.TABLE a WHERE T.C1 = a.C1 AND T.C2=a.C2)
T= le nom de la table dans Designer ( = nom alias )
schema.table = le nom physique (le nom du schéma n'est pas indispensable)

Merci à tous les 3 et en particulier à john malkovich !

Tux

PS : si je n'avais pas réussi , j'aurais surement fini par faire une demande de création de vue sur la BD...
tux2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h07.


 
 
 
 
Partenaires

Hébergement Web