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 08/01/2008, 16h37   #1
Invité régulier
 
Inscription : mai 2004
Messages : 22
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 22
Points : 9
Points : 9
Par défaut [BO 6.5] Jointure complexe et tables dérivées

Bonjour à tous,

Je rencontre un problème dans BO 6.5 concernant une jointure complexe avec une table dérivée.

J'ai une table dérivé CLASSENIV1 issu d'une table dans laquelle je filtre les enregistrements suivant la longueur d'un code (requête de génération SELECT CLASSE,LIBELLE FROM CLASSE WHERE LENGTH(CLASSE)=1)
Cette table contient donc toutes les classes de niveau 1

J'ai une table PRODUIT qui contient le code complet de la classe (code de type A11B1C1) où le premier caractère correspond au 1er niveau (correspondance avec mes classes de niveau 1)

Je fais donc une jointure entre ma table dérivée et cette table PRODUIT. La jointure est complexe (WHERE LPAD(PRODUIT.CLASSE,1)=CLASSENIV1.CLASSENIV1 )

Lorsque je crée un rapport, la jointure n'est jamais utilisé , BO me fait 2 select sur chacune des tables.

Pour essayer de résoudre le problème, j'ai essayé la même jointure sur la table CLASSE initiale et là ca marche ???

Quelqu'un a t'il une idée ?

Merci d'avance pour votre aide
tegestobis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 17h11   #2
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 184
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 184
Points : 2 723
Points : 2 723
Bonjour,

C'est pas très clair come explication ...
Si tu avais montré le sql de ta table dérivée + 1 ligne de données
on aurait pu se faire une idée de la jointure ...

Si on essaie de comprendre ...
table dérivée CLASSENIV1 :
CLASSE 1 caractère mais on ne sait pas si c'est 'A' ou '1'
LIBELLE classique
table PRODUIT :
CLASSE code complet de la classe (code de type A11B1C1)
Où 1er caractère correspond au 1er niveau (A ?)

De sorte que je ne comprends pas ce que LPAD vient faire ici ...?

c'est pas plutôt une jointure du premier caractère de PRODUIT.CLASSE avec CLASSENIV1.CLASSENIV1 que tu veux faire ?

Code :
substr(PRODUIT.CLASSE,1)=CLASSENIV1.CLASSENIV1
qu'en penses tu ?
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 17h29   #3
Invité régulier
 
Inscription : mai 2004
Messages : 22
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 22
Points : 9
Points : 9
Excusez moi si je n'ai pas été trés clair, un exemple :

Dans ma table produit, champ classe :
A11B1C1
B12C3C4
Toujours structuré de la même manière (le 1er caractére correspond au niveau 1, les deux seconds au niveau 2 etc...)

Dans ma table CLASSE :
A
A11
A12
A11B
A12B
etc...
B
B11
B12
etc...

Dans ma table dérivée, je n'ai donc que :
A
B

Pour le LPAD je ne sais pas où j'avais la tête mais c'est bien substr qu'il faut lire (extraction du premier caractère de la classe dans la table produit)

Excusez encore pour l'imprécision de ma question.
tegestobis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 17h39   #4
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 184
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 184
Points : 2 723
Points : 2 723
Bon ! Je me disais aussi ...
Donc cette jointure complexe c'est quoi au juste ?
celle que j'ai devinée ?
Code :
substr(PRODUIT.CLASSE,1)=CLASSENIV1.CLASSENIV1
et elle ne marche pas ?
compte le nb de caractères des deux colonnes jointes tu as peut être des espaces

Tu dis que la jointure n'est pas utilisée
Colle nous le sql utilisé entre balises code
qu'on puisse voir de quoi tu parles
Merci
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 18h05   #5
Invité régulier
 
Inscription : mai 2004
Messages : 22
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 22
Points : 9
Points : 9
Tout juste la jointure est celle ci :

Code :
1
2
 
CLASSENIV1.CLASSENIV1=substr(PRODUIT.CLASSE,1)
Lorsque je crée un rapport en sélectionnant l'objet libellé de la classe (CLASSENIV1.LIBELLE) et la référence du produit (PRODUIT.REFERENCE), il me génére 2 sql san jointure

SQL 1 :
Code :
1
2
3
4
5
 
SELECT   
  PRODUIT.REFERENCE
FROM
  PRODUIT
SQL 2 :
Code :
1
2
3
4
5
6
 
SELECT   
  CLASSENIV1.LIBELLE
FROM
  ( SELECT CLASSE.CLASSE AS CLASSENIV1,CLASSE.LIBELLE 
FROM CLASSE WHERE LENGTH(CLASSE.CLASSE)=1) CLASSENIV1
Pour info comme je le disais dans mon premier message si je fais la même jointure sur la table initiale j'ai bien

Code :
1
2
3
4
5
6
7
8
9
 
SELECT   
  CLASSE.LIBELLE,
  PRODUIT.REFERENCE
FROM
  CLASSE,
  PRODUIT
WHERE
  ( SUBSTR(PRODUIT.CLASSE,1)=CLASSE.CLASSE  )
tegestobis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 18h18   #6
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 184
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 184
Points : 2 723
Points : 2 723
J'ai peut être une idée ...
Dis moi dans les propositions suivantes celles qui sont vraies :
  • tu es en Oracle10
  • PRODUIT.CLASSE VARCHAR2(7) au moins
  • CLASSENIV1.CLASSENIV1 VARCHAR2(1)
tu devrais essayer de remplacer le sql de ta table dérivée
Code :
1
2
SELECT CLASSE.CLASSE AS CLASSENIV1,CLASSE.LIBELLE 
FROM CLASSE WHERE LENGTH(CLASSE.CLASSE)=1) CLASSENIV1
par
Code :
1
2
SELECT cast(CLASSE.CLASSE as varchar2(7)) AS CLASSENIV1,CLASSE.LIBELLE 
FROM CLASSE WHERE LENGTH(CLASSE.CLASSE)=1) CLASSENIV1
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 18h33   #7
Invité régulier
 
Inscription : mai 2004
Messages : 22
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 22
Points : 9
Points : 9
Citation:
* tu es en Oracle10
NON oracle 8
Citation:
* PRODUIT.CLASSE VARCHAR2(7) au moins
NON dans la table cela peut être variable ie produit rattaché à une classe de niveau 2 on a que 3 caractères
Citation:
* CLASSENIV1.CLASSENIV1 VARCHAR2(1)
OUI

J'ai testé la création de la table dérivé mais même problème
tegestobis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 18h47   #8
Invité régulier
 
Inscription : mai 2004
Messages : 22
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 22
Points : 9
Points : 9
Petite précision supplémentaire.

Ce n'est pas un problème de données car pour tester j'ai créé la table en dur dans un schéma

Code :
1
2
3
 
CREATE TABLE CLASSENIV1 AS SELECT CLASSE AS CLASSENIV1,LIBELLE 
FROM CLASSE WHERE LENGTH(CLASSE)=1
et je peux faire ma jointure sans problème via une requête SQL

Code :
1
2
3
 
SELECT LIBELLE,REFERENCE FROM 
PRODUIT,CLASSENIV1 WHERE CLASSENIV1.CLASSENIV1=SUBSTR(PRODUIT,CLASSETH,1,1)
tegestobis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 18h47   #9
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 184
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 184
Points : 2 723
Points : 2 723
Pour essayer le sql avec cast as tu pris la peine de regarder la taille des champs CLASSENIV1 et CLASSE

dans mon exemple j'ai mis 7 mais il faut que ce soit la taille de la colonne CLASSE


AUTRES PISTES DE RECHERCHE
Est ce que tu as des contextes dans ton univers ?
Si oui la table dérivée et la table PRODUIT sont elles dans le même contexte ?

As tu des tables agrégées ?
As tu créé des incompatibilités Table Objets ?
Un objet de l'une incompatible avec l'autre suffirait pour créer ce problàme
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 14h21   #10
Invité régulier
 
Inscription : mai 2004
Messages : 22
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 22
Points : 9
Points : 9
Bonjour,

Grâce à vos indications j'ai résolu le problème c'était un problème de contexte entre les deux tables

Merci beaucoup pour vos précieuses indications
tegestobis 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 14h27.


 
 
 
 
Partenaires

Hébergement Web