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 29/04/2008, 18h27   #1
Nouveau Membre du Club
 
Avatar de bbo1991
 
Inscription : novembre 2006
Messages : 100
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : novembre 2006
Messages : 100
Points : 25
Points : 25
Par défaut Jointures externes avec BO

hello,
Je débute avec BO et j'ai passé a journée à m'amuser avec l'univers exemple "Island Resort Marketing" fourni avec BO basé sur la bdd "beach.mdb".
Si on se tient à l'univers fourni comme exemple, aucune jointure externe n'a été définie ce qui fait que lorsqu'on demande par exemple le nombre de clients par pays, webI ne m'affiche que les pays qui ont reçu des clients.

Voulant bidouiller un peu la chose j'ai rajouté des jointures externes, je me suis ainsi aperçu qu'il fallait mettre des "OUTER JOIN" sur toutes les jointures entre toutes les tables de dimensions et de faits qui séparent les tables où les informations que je recherche sont stockées, en l'occurence la table "Invoice_line" pour le nombre de clients, et la table "resort_Country" pour identifier les pays.

En l'absence d'un "OUTER JOIN" dans une jointure intermédiaire j'obtiens systématiquement l'erreur suivante:

Code :
1
2
3
4
 
Exception: DBD, [Microsoft][Pilote ODBC Microsoft Access] Instruction SQL non exécutée: 
des jointures externes ambiguës. Pour forcer l'ordre d'exécution d'une des jointures en premier, 
créez une requête distincte qui exécute la première jointure, puis insérez cette requête dans votre instruction SQL.State: HY000
Erreur résolue en mettant des "OUTER JOIN" par ci par là.

Mon problème c'est que d'une part je ne comprends pas bien l'erreur ci-dessus et la BONNE procédure de sa résolution, d'autre part une fois avoir mis des "OUTER JOIN" un peu partout le gros problème reste la dimension "AGE_GROUP" comme on a ici une jointure formé avec un "between age-min and age_max" impossible de mettre un "OUTER JOIN" (les cases prévues à cet effet sont grisés même si on active l'ANSI 92)l'.
Ce qui fait que l'erreur énoncé ci-dessus s'affiche dès que je mixe l'objet "Age group" avec des mesures dans mes rapports.

En bref:
j'aimerai connaitre la bonne manière de gérer les jointures externes avec BO. En partant de l'exemple de l'univers "Island Resort Marketing" comment les mettre en oeuvre pour pouvoir afficher les éléments qui n'ont pas eu de résultats dans mes requêtes???
bbo1991 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 20h00   #2
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 185
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 185
Points : 2 724
Points : 2 724
Bonsoir,
Tes remarques sont tout à fait pertinentes.
Je pense que cela dépend des concepteurs d'univers, de leur expérience, mais surtout du nombre d'années lumière qui les séparent des utilisateurs et de la connaissance de leurs besoins.

Nombre d'éditeurs de progiciel (que je ne nommerai pas) livre des univers BO ... qui n'en sont pas (ou si peu):
  • Pas de dénormalisation
  • Pas d'historique
  • Pas d'agrégations
  • Pas de calculs réalisés (typiquement c'est le coup de la tranche d'âge, si elle était déjà calculée tu aurais ta jointure externe)
  • Pas de gestion des incompatibilités Objet / Tables (là c'est révélateur l'utilisateur doit choisir entre plusieurs contexte - le pôvre -à l'exécution de la requête )
En revanche :
  • des clauses Where dans le SQL des objets (passionant ce que ça peut générer des clauses where en cohabitation )
  • Et surtout :
  • une table = une classe d'objet
  • une colonne de table = un objet
  • l'année avec des décimales (ben oui par défaut le numérique il en a ) ...
Le tout basé sur la base de production et son CMD.

Au prix où sont les licences BO ... une bonne base Access en ODBC ferait la même chose ...
__________________
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 29/04/2008, 22h04   #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,

Je rajouterai que les jointures externes sont gourmandes en performances, donc si tu peux il vaut mieux les éviter.

Citation:
le nombre de clients par pays, webI ne m'affiche que les pays qui ont reçu des clients.
Si tu veux afficher tous les pays de la base, dans ton univers, dans une requête tu ne prends que l'objet pays.

De plus, la base de données d'exemple est fait pour qu'on puisse bidouiller dessus, elle n'est pas optimale il me semble notamment quand je vois le nombre de boucle qui existe dans l'univers. C'est sûrement fait exprès pour apprendre à l'utilisateur à gérer les alias et les contextes.

Quand tu dois passer par 2 dimensions pour arriver à la dimensions pays, il est normal que si tu veux faire une jointure externe sur pays il faut les faire sur les 2 dimensions qui permet de l'atteindre.

Citation:
j'aimerai connaitre la bonne manière de gérer les jointures externes avec BO
La question seraît plutôt comment modéliser l'univers de manière optimale.
eryk71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 16h21   #4
Nouveau Membre du Club
 
Avatar de bbo1991
 
Inscription : novembre 2006
Messages : 100
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : novembre 2006
Messages : 100
Points : 25
Points : 25
Citation:
Si tu veux afficher tous les pays de la base, dans ton univers, dans une requête tu ne prends que l'objet pays.
En fait ce que je voulais c'était afficher tous les pays et le nombre de clients que chaque pays a reçu. Pour les pays qui n'ont reçu aucun client, je veux voir l'information 'zéro client' à côté. Ce que je suis finalement arrivé à faire en bidouillant l'univers.
Si on se tient à l'univers exemple, on ne peut afficher que les clients qui ont reçu des clients à cause de l'absence de jointure externe.

Citation:
Quand tu dois passer par 2 dimensions pour arriver à la dimensions pays, il est normal que si tu veux faire une jointure externe sur pays il faut les faire sur les 2 dimensions qui permet de l'atteindre.
En effet c'est ce que j'ai dû faire, en ajoutant qu'on doit en plus suivre sur toute la chaîne le même sens de jointure. Je veux dire par là qu'on ne peut pas combiner dans la requête des "LEFT JOIN" puis mettre un "RIGHT JOIN". Je ne me suis aperçu de ce fait qu'en manipulant BO et il s'avère que ceci impose des restrictions sur les logiques que l'on veut imposer.

Comme quoi je pense en effet que c'est la conception qui est mal foutue dès le départ avec cet exemple...
bbo1991 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 17h01   #5
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
Bonjour,

Si tu estimes que ton problème est résolu peut tu mettre le tag resolu please
eryk71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2009, 15h48   #6
Invité de passage
 
Inscription : octobre 2006
Messages : 1
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 1
Points : 1
Points : 1
Par défaut Base Access avec des jointures externes

Citation:
Envoyé par bbo1991 Voir le message
hello,
Je débute avec BO et j'ai passé a journée à m'amuser avec l'univers exemple "Island Resort Marketing" fourni avec BO basé sur la bdd "beach.mdb".
Si on se tient à l'univers fourni comme exemple, aucune jointure externe n'a été définie ce qui fait que lorsqu'on demande par exemple le nombre de clients par pays, webI ne m'affiche que les pays qui ont reçu des clients.

Voulant bidouiller un peu la chose j'ai rajouté des jointures externes, je me suis ainsi aperçu qu'il fallait mettre des "OUTER JOIN" sur toutes les jointures entre toutes les tables de dimensions et de faits qui séparent les tables où les informations que je recherche sont stockées, en l'occurence la table "Invoice_line" pour le nombre de clients, et la table "resort_Country" pour identifier les pays.

En l'absence d'un "OUTER JOIN" dans une jointure intermédiaire j'obtiens systématiquement l'erreur suivante:

Code :
1
2
3
4
 
Exception: DBD, [Microsoft][Pilote ODBC Microsoft Access] Instruction SQL non exécutée: 
des jointures externes ambiguës. Pour forcer l'ordre d'exécution d'une des jointures en premier, 
créez une requête distincte qui exécute la première jointure, puis insérez cette requête dans votre instruction SQL.State: HY000
Erreur résolue en mettant des "OUTER JOIN" par ci par là.

Mon problème c'est que d'une part je ne comprends pas bien l'erreur ci-dessus et la BONNE procédure de sa résolution, d'autre part une fois avoir mis des "OUTER JOIN" un peu partout le gros problème reste la dimension "AGE_GROUP" comme on a ici une jointure formé avec un "between age-min and age_max" impossible de mettre un "OUTER JOIN" (les cases prévues à cet effet sont grisés même si on active l'ANSI 92)l'.
Ce qui fait que l'erreur énoncé ci-dessus s'affiche dès que je mixe l'objet "Age group" avec des mesures dans mes rapports.

En bref:
j'aimerai connaitre la bonne manière de gérer les jointures externes avec BO. En partant de l'exemple de l'univers "Island Resort Marketing" comment les mettre en oeuvre pour pouvoir afficher les éléments qui n'ont pas eu de résultats dans mes requêtes???
Même problème, aussi peux tu montrer un exemple dans l'univers BO pour arriver à faire fonctionnéer ce type de liaison "left join" avec access /ODBC
Manipulation dans une jointure ou dans indicateur ?
Par avance merci
kokombo 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 23h51.


 
 
 
 
Partenaires

Hébergement Web