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 10/10/2007, 17h58   #1
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 67
Points : 15
Points : 15
Par défaut 2 indicateurs sur la même table de fait

Hello tous,

J'ai 2 indicateurs sur une même table de fait.
Ils ont tous les deux des clauses Where différentes.

Si je prends les 2 dans un même rapport, il y en aura donc un des deux qui sera faux, voire les deux vu que les deux clauses vont s'additionner.

Il y a quoi comme solution en dehors de :

1/ contextes différents (en aliasant la tablde fait) qui forçeront la génération de 2 ordres SQL

2/ faire 2 fournisseurs de données (un sur chaque indicateur) dans le rapport.

3/ remonter les critères du where dans le select en faisant une somme conditionnelle (sum(case when ...) ... plus risqué pour les perfs.

NB : l'option d'univers 'plusieurs SQL pour chaque indicateurs' ne marche pas pour ce pbm là car on est dans la même table de fait (cf. doc).

Merci d'avance
+
Jeff.p18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 09h55   #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
Salut,
Je choisirais la réponse 3.

Un univers avec des clauses where dans le sql des objets ... est un univers mal fait ! (même si BO le propose)
Un gars de chez BO m'a mis le pied à l'étrier pour mon premier univers et d'entrée de jeu m'a filé cette règle.
Je l'ai adoptée et ne l'ai jamais regrété même pas en termes de perf.

De deux choses l'une :
  1. On veut limiter l'univers entier à par exemple un pays ou un site (valeur d'un champ d'une table)
    Dans ce cas c'est au niveau de la table que l'on doit créer une jointure restrictive de type
  2. On veut deux objets répondant à des conditions sur le même champ d'une même table, dans ce cas on remplace la clause where du sql de l'objet par decode ou case selon la version Oracle
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
pour un dénombrement :
objet1 nb de .... remplacer count(TABLE.champ) WHERE TABLE.champCritère = 'Critère1' par
sum(decode(TABLE.champCritère ,'Critère1',1,0)) 
 
objet2 nb de .... remplacer count(TABLE.champ) WHERE TABLE.champCritère = 'Critère2' par
sum(decode(TABLE.champCritère ,'Critère2',1,0)) 
 
pour une valeur type quantité ou montant (champ numérique): 
montant1 .... remplacer sum(TABLE.montant) WHERE TABLE.champCritère = 'Critère1' par
sum(decode(TABLE.champCritère ,'Critère1',TABLE.montant,0)) 
 
montant2 .... remplacer sum(TABLE.montant) WHERE TABLE.champCritère = 'Critère2' par
sum(decode(TABLE.champCritère ,'Critère1',TABLE.montant,0))
L'utilisation des deux objets ne pose plus aucun problème.

Une autre solution si on avait le même objet sans clause where aucune serait dans BO d'utiliser
Code :
=<mavariable>(<Dimension> = "Critère")
__________________
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 11/10/2007, 21h16   #3
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 67
Points : 15
Points : 15
Merci pour cette réponse.

En plus Oracle à un optimiseur tellement puissant que finalement ça change peut-être pas grand chose. Je regarderai les plans d'execution pour vérifier ...

Par contre je comprends pas bien ta dernière phrase ?!?

+
Jeff.p18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 09h37   #4
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
Bonjour,
Au sujet de ma dernière phrase ...

Je me demandais pourquoi avoir deux objets différents portant sur un même champ d'une même table (si j'ai bien compris) et ne se différenciant que par des clauses where quand on a besoin d'afficher les deux informations côte à côte.

Imaginons un seul objet indicateur dépourvu de clause where ...
Exemple au lieu de deux objets
objet1 <nb de points des Bleus> défini par le sql suivant
SELECT LEMATCH.PTS WHERE LEMATCH.EQUIPE = 'BLEUS"

objet2 <nb de points des Blacks> défini par le sql suivant
SELECT LEMATCH.PTS WHERE LEMATCH.EQUIPE = BLACKS"

un objet indicateur unique sans clause where
<nb points>
SELECT LEMATCH.PTS
et un objet Dimension
<Equipe>
SELECT LEMATCH.EQUIPE

L'utilisateur BO peut alors faire une requête basée sur les objets
<Date du match>
<Equipe>
<nb points>
avec en condition <Date du match> = 06/10/2007

il obtient un tableau :
Date du match Equipe nb points
06/10/2007 Blacks 3
06/10/2007 Blacks 5
06/10/2007 Blacks 2
06/10/2007 Blacks 3
06/10/2007 Bleus 3
06/10/2007 Bleus 3
06/10/2007 Bleus 5
06/10/2007 Blacks 2
06/10/2007 Bleus 5
06/10/2007 Bleus 2

Si on enlève du tableau la dimension Equipe on obtient
Date du match nb points
06/10/2007 38

Si maintenant on ajoute une colonne à droite de celle du nb de points
et que dans ces deux colonnes on modifie la formule de la façon suivante
<nb points> Où (<Equipe> = "Bleus") que lon peut nommer en variable Nous
<nb points> Où (<Equipe> = "Blacks") que lon peut nommer en variable Eux

On obtient le tableau

Date du match Nous Eux
06/10/2007 20 18
Ce qui me fait dire que un seul objet sans clause where suffit pour afficher ensemble ces deux résultats

Bien entendu un simple tableau croisé affiche le même résultat.
La méthode ci dessus est utile lorsque l'on veut faire des calculs différents sur les colonnes de valeurs obtenues

Exemple Dépenses 2006 x 1,02 et Dépenses 2007 / 9mois X 12 mois
Le tableau croisé ne permet pas de le faire
__________________
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é
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web