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 04/01/2008, 18h06   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 6
Points : 1
Points : 1
Par défaut [BO 5.1.2] Alias et requètes

Bonjour,
Je suis nouvelle utilisatrice de BO designer. Je dois créer un Univers à partir d'une base de donnée SQL server. Je suis en cours de test avec des requètes simples voici mon problème:

J'ai créé deux alias sur une table pour distinguer (par exemple) les personnes de type commerciaux et les personnes de type client.
Mais je ne peux pas en une seule requête avoir à la fois le commercial et le client lié à un contrat.
Est-ce propre à l'ALIAS? J'ai essayé avec une condition idem, j'ai besoins de créer deux requètes puis les lier. cette solution ne me semble pas acceptable pour un utilisateur, dois-je modifier ma BDD en entrée?

Voici la requète générée par BO lorsque je teste:

SELECT
CONT.NUMCNT,
PERS_Client.NUMPER,
PERS_Commercial.NUMPER
FROM
CONTPERS,
CONT,
PERS PERS_Redacteur,
PERS PERS_Commercial
WHERE
( dbo.CONT.COD=dbo.CONTPERS.COD and CONT.NUMCNT=CONT.NUMCNT )
AND ( PERS_Commercial.Fonper='999' )
AND ( PERS_Redacteur.FONper='001' )
AND ( dbo.CONTPERS.COD=PERS_Commercial.COD and dbo.CONTPERS.NUMPER=PERS_Commercial.NUMPER )
AND ( dbo.CONTPERS.COD=PERS_Redacteur.COD and dbo.CONTPERS.NUMPER=PERS_Redacteur.NUMPER )
AND (
year(dbo.CONT.date) = 2007
)

Les tables PERS_Redacteur et PERS_Commercial sont des alias de la table PERS.

Merci pour votre aide.
lbu44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 20h13   #2
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 181
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 181
Points : 2 717
Points : 2 717
Bonsoir,
Je ne pratique pas SQL Server (seulement Oracle)
Mais il ne semble pas que le SQL soit très différent

Je voudrais comprendre :
Dans ta table CONT les contrats avec N° de contrat et code ?
puis une table CONTPERS avec N° de contrat et code PERS
enfin une table PERS

en dehors du copier coller identique dans la 1ère jointure
Code :
1
2
WHERE
( dbo.CONT.COD=dbo.CONTPERS.COD and CONT.NUMCNT=CONT.NUMCNT )
que j'ai mentalement rétablie
Code :
1
2
WHERE
( dbo.CONT.COD=dbo.CONTPERS.COD and dbo.CONT.NUMCNT=dbo.CONTPERS.NUMCNT )
ainsi que PERS_Client dans le SELECT ...

Je pense que ton problème est que dans CONTPERS tu as une ligne par personne rattachée au contrat ... ?
Me trompe-je ?

Si c'est le cas , il te faudrait plutôt que une table CONTPERS et deux alias PERS...
2 sous requêtes (un peu comme des vues oracle) de ce type
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT CONT.NUMCNT, 
ContpersCommerc .NUMPER,
ContpersRedac .NUMPER
FROM
CONT,
(SELECT CONTPERS.COD, CONTPERS.NUMCNT, PERS.NUMPERS
FROM CONTPERS, PERS
WHERE   (dbo.CONTPERS.COD=PERS.COD AND dbo.CONTPERS.NUMPER=PERS.NUMPER )
AND PERS.Fonper='999' ) ContpersCommerc ,
(SELECT  CONTPERS.COD,  CONTPERS.NUMCNT,  PERS.NUMPERS
FROM CONTPERS, PERS
WHERE   (dbo.CONTPERS.COD=PERS.COD AND dbo.CONTPERS.NUMPER=PERS.NUMPER )
AND PERS.Fonper='001' ) ContpersRedac 
WHERE
( dbo.CONT.COD=dbo.ContpersCommerc .COD AND dbo.CONT.NUMCNT=dbo.ContpersCommerc .NUMCNT )
AND
( dbo.CONT.COD=dbo.ContpersRedac .COD AND dbo.CONT.NUMCNT=dbo.ContpersRedac .NUMCNT )
Maintenant, ne connaissant pas tes tables, je peux me tromper et ne saurais te dire si tu as besoin d'equijointures ou de jointures externes ...
Dis moi si ça t'aide
__________________
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 05/01/2008, 01h50   #3
Membre confirmé
 
Avatar de eryk71
 
Inscription : novembre 2007
Messages : 322
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 322
Points : 261
Points : 261
Bonsoir,

Citation:
J'ai créé deux alias sur une table pour distinguer (par exemple) les personnes de type commerciaux et les personnes de type client
En fait je pense que tu n'a créee que 1 seul Alias sur la table personne que tu as nommé pers_commerciaux par exemple et tu as renommé la table personne en pers_client.

Citation:
Est-ce propre à l'ALIAS? J'ai essayé avec une condition idem, j'ai besoins de créer deux requètes puis les lier. cette solution ne me semble pas acceptable pour un utilisateur, dois-je modifier ma BDD en entrée?
Un Alias ou un Contexte permet d'éviter les boucles dans ton modèle (appelé modèle en étoile généralement) qui peuvent poser des problème sur le résultat de tes requêtes.
Pour lier un alias à la table source, il suffit de faire un clic droit sur l'alias et de séléctionner "jointure". Une fenêtre s'affiche alors et tu peux choisir le type de jointure (equi-jointure, jointure externe ...) ainsi que la cardinalité.

Sous le module "reporter" de BO, après avoir choisis l'univers, tu peux apercevoir l'alias et ta table initiale. Tu crées donc ta requête, pou lier 2 requêtes tu peux utiliser les valeurs ensemblistes (union, inter, minus).

Je ne connais pas également SQL serveur, comme Bruno2R je travaille sous Oracle, mais en regardant ta requête, ce qui me paraît bizarre c'est que dans ta clause "select" tu utilises la table PERS_Client (PERS_Client.NUMPER) mais elle n'apparaît ni dans la clause "from" ni dans la clause "where" pour faire la jointure.

En espérant que ça puisse t'aider.
eryk71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 14h43   #4
Invité de passage
 
Inscription : janvier 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 6
Points : 1
Points : 1
Bonjour,
D'abord merci de vous interesser à mon problème, ensuite, pour Bruno2r, bravo tu as mentalement bien rétablie ma requête que j'ai très mal maquillée... et en effet dans CONTPERS j'ai bien une ligne par personne rattachée au contrat.

Ta solution avec deux sous requêtes indique donc que je dois lier deux requêtes?
je ne connaîs pas bien le requèteur BO car je dois juste fournir un Univers pour un client qui lui devra gérer des rapports pour ses utilisateurs. Et je ne pense pas que ce client puisse lui même saisir du sql, est-il simple de générer deux sous requètes par le reporter BO?

Pour répondre à eryk 71 j'ai bien créé deux alias distincts, que j'ai joint à la table réelle. Je n'ai pas de boucle, et ces Alias ne me permettent pas de résoudre une boucle mais plutôt de diviser la table personne en deux tables distinct c'est à dire d'un coté les commerciaux et de l'autre les clients. Je pensait que BO considèrerait ces ALIAS comme des tables distincte les unes des autres et me permettrait de sélectionner simplement sur une même ligne un contrat un client et un commercial.

Je joins une partie de mon univers, pensez vous qu'une solution serait de créer en plus de mes alias sur la tables attachés, deux alias sur la table? attachecontrat (par rapport a ma requête maquillée à la place de personne c'est la table attaché et le client est un rédacteur).


Merci,
Lbu
Images attachées
Type de fichier : jpg schema1.JPG (17,1 Ko, 8 affichages)
lbu44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 18h15   #5
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 181
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 181
Points : 2 717
Points : 2 717
Citation:
Envoyé par lbu44 Voir le message
Bonjour,
D'abord merci de vous interesser à mon problème,
Alors là vois tu on est la pour ça Forum d'entraide des développeurs ...
Code :
ensuite, pour Bruno2r, bravo tu AS mentalement bien rétablie ma requête que j'ai très mal maquillée... et en effet dans CONTPERS j'ai bien une ligne par personne rattachée au contrat.
Stop !
Tes allias ne servent à rien car tu as un seul champ COD et une ligne différente par individu possédant une fonction définie par Fonper tu ne peux donc pas avoir deux équijointures pour un seul champ elles s'annuleraient entre elles.
Des jointures externes sur les deux alias pourraient te ramener l'identité du commercial sur sa ligne et celle du rédacteur sur la sienne.
Mais tu n'aurais toujours pas les infos sur l'UNIQUE ligne du contrat ...

Citation:
Ta solution avec deux sous requêtes indique donc que je dois lier deux requêtes?
Non ! Mon SQL pourrait être celui d'une table dérivée (sorte de vue sur plusieurs tables) que tu pourrais insérer dans ton univers comme une table existante de la base
Mais tu es en version 5 et les tables dérivées ne sont utilisables qu'à partir de la V6.
Citation:
je ne connaîs pas bien le requèteur BO car je dois juste fournir un Univers pour un client qui lui devra gérer des rapports pour ses utilisateurs. Et je ne pense pas que ce client puisse lui même saisir du sql, est-il simple de générer deux sous requètes par le reporter BO?
Solution :
  1. Virer les alias qui ne servent à rien
  2. Garder la table dbo.ATTACHE seule
  3. Créer tes objets
  • contrat num
  • contrat date
  • ...
  • code pers
  • Identité Nom + prénom
  • Fonction avec un test sur Fonper pour produir le libellé de la fonction plutôt que son code
C'est l'utilisateur dans BO qui ramassera ces objets dans sa requête
Il aura effectivement autant de lignes par contrat que d'individus rattachés
Il ne pourra pas résoucre le problème de lignes multiples en faisant un tableau croisé basé sur le code de fonction
  • en lignes les contrats, dates et autres infos du contrat
  • en colonne les fonctions
  • à l'intersection les identités
car seule l'agrégation de valeurs numériques (indicateurs) fait disparaitre les lignes multiples

Il ne pourra pas le résoudre non plus avec les formules contextuelles
En effet, l'opérateur contextuel Où n'est disponible qu'avec les objets indicateurs là aussi.

La seule solution (en tout cas dans l'état actuel de mes connaissances - mais je pense que je vais me pencher sur le sujet) est de
  • créer une rupture sur le contrat
  • Centrer sur la valeur de cette rupture (dans Formater les ruptures)
A demain ...
__________________
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 06/01/2008, 18h38   #6
Invité de passage
 
Inscription : janvier 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 6
Points : 1
Points : 1
Ok je dois très rapidement passer en version 6.5, donc je peux peut être demander à mon client de patienter afin de pouvoir créer ces vues et attendant je lui propose les solutions tableaux croisés ou formules contextuelles.
Je reviendrais d'ici quelques temps pour vous dire si j'arrive à m'en sortir avec mes vues...
Merci pour tout, A+ Lbu44
lbu44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2008, 20h14   #7
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 181
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 181
Points : 2 717
Points : 2 717
Je vois que tu as parfaitement compris, bonne chance !
Peux tu mettre Résolu s'il te plait ça fait gagner du temps à ceux qui veulent aider ... et ça donne envie aux autres de lire quelle solution a été trouvée.
Merci d'avance et à bientôt.
__________________
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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h15.


 
 
 
 
Partenaires

Hébergement Web