Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Deski
Deski Forum d'entraide Deski (client lourd)
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 19/01/2008, 23h41   #1
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Par défaut [BO 5.1.9] Problème sur somme "indéfini"

Bonjour à tous,

J'ai encore un petit soucis....

J'ajoute plusieur valeurs résultantes de requêtes sql afin de faire un cumul de ces données (Total des recettes).
Si pour une de ces valeurs, il n'y a pas de résultat ramenée par la requête, la somme pour les autres valeurs ne s'affiche pas non plus ...
La cellule de la somme reste vide alors qu'elle devrait normalement afficher la somme des autres valeurs.
Voici un exemple qui correspond à la somme des recettes pour le mois de janvier "01".
Avez-vous une idée ?
Existe t'il une astuce pour que la somme puisse se faire même si il n'y a pas de valeur ramenée par une des requêtes (valeur indéfini ramenée) ?
Doit-on poser x conditions ?
Dans le cas des conditions, comment traiter une condition avec une valeur indéfini ?

=
((<total>) Où (<DateEcheance> = "01") Où (<CDE_CLIENT> = "Cdes. Clients"))
requête 1
+
((<CdesLivréesNonFacturées>) Où (<DateBlNonLivrés> = "01") Où (<BLNONFACTURES> = "Bl Liv. Non Fact."))
requête 2
-
((<CdesLivréesNonFacturées1>) Où (<DateBlNonLivrés1> = "01") Où (<BLNONFACTURES1> = "Bl Liv. Non Fact."))
requête 3
+
((<MontantFactureClientEnAttente>) Où (<DateFactureEnAttente> = "01") Où (<RegroupFactClientEnAttente> = "Fact. Cli. En Att."))
requête 4

LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 09h42   #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
Citation:
Envoyé par LOPEZ Voir le message
Bonjour à tous,

J'ai encore un petit soucis....

J'ajoute plusieur valeurs résultantes de requêtes sql afin de faire un cumul de ces données (Total des recettes).
Si pour une de ces valeurs, il n'y a pas de résultat ramenée par la requête, la somme pour les autres valeurs ne s'affiche pas non plus ...
La cellule de la somme reste vide alors qu'elle devrait normalement afficher la somme des autres valeurs.
Voici un exemple qui correspond à la somme des recettes pour le mois de janvier "01".
Avez-vous une idée ?
Existe t'il une astuce pour que la somme puisse se faire même si il n'y a pas de valeur ramenée par une des requêtes ?
Doit-on poser x conditions ?
Dans le cas des conditions, quelle est la valeur renvoyée dans une cellule s'il n'y a pas de résultat à la requête ?

=
((<total>) Où (<DateEcheance> = "01") Où (<CDE_CLIENT> = "Cdes. Clients"))
requête 1
+
((<CdesLivréesNonFacturées>) Où (<DateBlNonLivrés> = "01") Où (<BLNONFACTURES> = "Bl Liv. Non Fact."))
requête 2
-
((<CdesLivréesNonFacturées1>) Où (<DateBlNonLivrés1> = "01") Où (<BLNONFACTURES1> = "Bl Liv. Non Fact."))
requête 3
+
((<MontantFactureClientEnAttente>) Où (<DateFactureEnAttente> = "01") Où (<RegroupFactClientEnAttente> = "Fact. Cli. En Att."))
requête 4

Bonjour,
Si j'ai bien compris ta situation est la suivante :
3 sql à la carte
pointant sur 3 tables
dans la même base (Oracle ?)

N'ayant pas BO sous la main pour cause de dimanche à la maison je ne puis vérifier ce que je te propose ...

Pour contourner l'absence de valeur tu peux utiliser des conditions :
Si(EstNul(ta formule) Alors 0 Sinon ta formule

Cela dit ta formule indique que tes sql ne sont pas synchronisés...

Méthode 1 :
Synchroniser les requêtes dans le gestionnaire de données
Dans la liste de gauche ouvrir (cliquer sur "+") la liste des objets correspondant aux champs ramenés
Vérifier que les données numériques autres que les valeurs ou quantités sont de type Dimension ou Information rattachée à une Dimension, en sql à la carte les données numériques sont par défaut en Indicateur.
Sélectionner <DateEcheance>
Dans onglet Définition cliquer sur Lier
Dans liste du SQL 2 choisir <DateBlNonLivrés>
Valider
Sélectionner <CDE_CLIENT>
Lier cet objet avec l'objet correspondant de SQL2
Pour l'instant ne lier que ces 2 sql
tester dans un tableau les données de sql1 et 2 et additionner les montants.

Ensuite faire de même avec les objets dimension de sql3

Méthode 2 : ma préférée
Puisque c'est du sql à la carte tu devrais te faire une seule requête de ce type
Code :
1
2
3
4
5
6
7
8
SELECT CLIENT, CDE_CLIENT, DateEcheance AS DTEREF, Montant
FROM TABLE1
UNION
SELECT CLIENT, CDE_CLIENT, DateBlNonLivrés, Montant
FROM TABLE2
UNION
SELECT CLIENT, CDE_CLIENT, (<DateFactureEnAttente> , Montant
FROM TABLE3
mais sans tes sql ce n'est pas évident d'imaginer tes tables ....
__________________
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 20/01/2008, 10h01   #3
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Salut Bruno2r,

Le dimanche n'est pas fait pour travailler, Lol ...

Je ne peux lier ces données entre elles car elle n'ont pas de dates communes.
<DateEcheance> n'a aucun rapport avec <DateBlNonLivrés>.
M01 est calculé différemment pour chaque requête et ne ramène pas les même dates.

J'ai déjà testé 'Si(EstNul(ta formule) Alors 0 Sinon ta formule' mais cela ne envoie rien non plus ... On dirait que si la valeur est indéfini la fonction ne considère pas qu'elle soit Null ou en Erreur (EstNul(), EstErreur().)

N'exist'il pas un moyen d'affecter une valeur par défaut de 0,00001 par exemple à toutes les cellules vides (indéfini) comme pour le paramétrage du format des cellules par exemple ?

Merci pour ton aide.
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 10h06   #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
Citation:
Envoyé par LOPEZ Voir le message
Salut Bruno2r,

Le dimanche n'est pas fait pour travailler, Lol ...

Je ne peux lier ces données entre elles car elle n'ont pas de dates communes.
<DateEcheance> n'a aucun rapport avec <DateBlNonLivrés>.
M01 est calculé différemment pour chaque requête et ne ramène pas les même dates.

J'ai déjà testé 'Si(EstNul(ta formule) Alors 0 Sinon ta formule' mais cela ne envoie rien non plus ... On dirait que si la valeur est indéfini la fonction ne considère pas qu'elle soit en erreur.

N'exist'il pas un moyen d'affecter une valeur par défaut de 0,00001 par exemple à toutes les cellules vides (indéfini) comme pour le paramétrage du format des céllules par exemple ?

Merci pour ton aide.
Soit tu synchronise tes requêtes Client et N° Commande
Sont elles synchronisées ? Tu ne me le dis pas ...
Soit tu crée le sql dont tu as besoin
Montre nous tes 4 sql ...
__________________
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 20/01/2008, 10h16   #5
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Requête 1 :

SELECT t1.cocde, t1.naf, ((((t1.qteafrest)*(t1.prixaf*100))/10000)*(t2.valeur)) AS total, t1.cocli, t2.dat, t3.nbj1, t3.nj1, t3.nbj2, t3.nj2, t3.fdm
FROM affaire t1, echeanc t2
LEFT JOIN reglem t3 ON t2.coder = t3.coder
WHERE t1.cocde = t2.cocde AND t1.qteafrest > 0 AND t1.etataf <> 'S' AND t1.prixaf <> 0


Requête 2 :

SELECT BL.L_R AS TYPEBL, BL.DATEBL, AFF_BL.BLCHIFFRE,(((AFF_BL.QTE)*(AFFAIRE.PRIXAF*100))) AS blnonfact
FROM BL, AFF_BL, AFFAIRE
WHERE BL.NUMBL = AFF_BL.NUMBL
AND AFFAIRE.NAF = AFF_BL.NAF AND AFF_BL.BLCHIFFRE <> 'O' AND BL.L_R < 2 AND AFFAIRE.PRIXAF <> 0


Requête 3 :

SELECT T3.NUMFACT AS NUMFACT, T2.DAT AS DATEFACT, T2.FLAG AS FLAG, ((T3.QTE)*(T3.PRIXMON*100)) AS FactClientEnAttente
FROM ECHEANC T1, ENFACT T2, FACT T3
WHERE T2.EFCLEUNIK = T3.EFCLEUNIK AND T1.ECCLEUNIK = T2.EFCLEUNIK
AND T2.FLAG <> 'V' AND T2.FLAG <> 'C' AND T3.PRIXMON <> 0


Requête 4 :

SELECT BL.L_R AS TYPEBL1, AFF_BL.BLCHIFFRE AS BLCHIFFRE1, BL.DATEBL AS DATEBL1,(((AFF_BL.QTE)*(AFFAIRE.PRIXAF*100))) AS blnonfact1
FROM BL, AFF_BL, AFFAIRE
WHERE BL.NUMBL = AFF_BL.NUMBL
AND AFFAIRE.NAF = AFF_BL.NAF AND AFF_BL.BLCHIFFRE <> 'O' AND BL.L_R = 2 AND AFFAIRE.PRIXAF <> 0



Je dois tout de même te préciser que je travaille sur un tableau non croisé composé de colonne renseignée une à une avec:
(<indicateur>) Où (<DimensionMois> = 'M01') Où (<DimRegroupement> = "VariableDeRegroupement")

Cela fonctionne parfaitement sur plusieurs bases, mais lorsque je ne ramène pas de valeur pour un des éléments de la somme cela foire...
Si une valeur est ramenée alors la somme fonctionne est de plus le résultat s'affiche correctement aussi pour tous les autres mois (M02, M03...M12).
On dirait qu'il faut au moins 1 valeur par élément (Peu importe d'ailleur l'endroit, car si j'ajoute cette valeur manquante en décembre (M12) par exemple, cela affiche aussi les bons résultats pour toutes les autres sommes.

Les valeurs synchronisées sont celles des requêtes 2 et 4 (DATEBL <-> DATEBL1 et BLCHIFFRE <-> BLCHIFFRE1) car elles affichent le résultat de leur soustraction (une des valeurs de la somme)
Les autres valeurs ne le sont pas entre elles.


Merci Mister Bruno2r
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 10h43   #6
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
Merci pour les SQL ça aide ...
Je remarque que dans 3 SQL / 4 tu as la table affaire
dans celle ci tu cocde et naf
il faut que tu la relies aux autres tables dans les 4 sql
ainsi tu pourras construire un unique SQL du genre
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SELECT A.cocde, A.naf, A.total, 
B.blnonfact, 
C.FactClientEnAttente, 
D.blnonfact1
FROM
(SELECT t1.cocde, t1.naf, ((((t1.qteafrest)*(t1.prixaf*100))/10000)*(t2.valeur)) AS total
FROM affaire t1, echeanc t2
LEFT JOIN reglem t3 ON t2.coder = t3.coder
WHERE t1.cocde = t2.cocde AND t1.qteafrest > 0 AND t1.etataf <> 'S' AND t1.prixaf <> 0) A,
 
(SELECT BL.L_R AS TYPEBL, BL.DATEBL, AFF_BL.BLCHIFFRE,(((AFF_BL.QTE)*(AFFAIRE.PRIXAF*100))) AS blnonfact
FROM BL, AFF_BL, AFFAIRE
WHERE BL.NUMBL = AFF_BL.NUMBL
AND AFFAIRE.NAF = AFF_BL.NAF AND AFF_BL.BLCHIFFRE <> 'O' AND BL.L_R < 2 AND AFFAIRE.PRIXAF <> 0) B,
 
(SELECT T3.NUMFACT AS NUMFACT, T2.DAT AS DATEFACT, T2.FLAG AS FLAG, ((T3.QTE)*(T3.PRIXMON*100)) AS FactClientEnAttente
FROM ECHEANC T1, ENFACT T2, FACT T3
WHERE T2.EFCLEUNIK = T3.EFCLEUNIK AND T1.ECCLEUNIK = T2.EFCLEUNIK
AND T2.FLAG <> 'V' AND T2.FLAG <> 'C' AND T3.PRIXMON <> 0) C,
 
(SELECT BL.L_R AS TYPEBL1, AFF_BL.BLCHIFFRE AS BLCHIFFRE1, BL.DATEBL AS DATEBL1,(((AFF_BL.QTE)*(AFFAIRE.PRIXAF*100))) AS blnonfact1
FROM BL, AFF_BL, AFFAIRE
WHERE BL.NUMBL = AFF_BL.NUMBL
AND AFFAIRE.NAF = AFF_BL.NAF AND AFF_BL.BLCHIFFRE <> 'O' AND BL.L_R = 2 AND AFFAIRE.PRIXAF <> 0) D
 
WHERE ICI LES JOINTURES EXTERNES portant sur naf (j'imagine)
DE A VERS B
AND DE A VERS C
AND DE A VERS D
J'ai laissé les select tel quel mais il faut les simplifier pour ne ramener que ce que tu veux dans ce tableau
Je n'ai pas rédigé les jointures ne sachant pas quelle base est derriè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 20/01/2008, 11h37   #7
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Bruno2r,

Merci pour cette requête mais je ne peux l'executer, je travaille sur une base hyperfile ou les requêtes imbriquées ne fonctionnent pas et la plus part des fonctions sql ne sont pas opérationnelles non plus...

On ne peut faire que du sql très rudimentaires. Du coup je suis obligé dans faire plusieurs et de traiter les données dans BO (filtres complexes, tris, variables de calculs et de regroupement...).

En fait, le problème serait résolu si je pouvais remplacer les valeurs indéfinis par 0. Mais pour cela il faudrait que je puisse tester une cellule indéfini afin de conditionner son calcul.

Du style : Si VALEURINDEFINI ALORS 0

Mais comment faire ?

Merci beaucoup
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 11h47   #8
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
Utiliser la fonction EstNul(<variable)
Code :
1
2
Cette fonction retourne 1 si NULL et 0 si pas NULL donc
Si(EstNull(<variable>)=1) Alors 0 Sinon <variable>
Mais cela ne marchera que si tes requêtes sont synchronisées sur naf et cocde ... j'insiste !
__________________
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 20/01/2008, 12h07   #9
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Salut Bruno2r,

Cela ne fonctionne toujours pas, je vais essayé en synchronisant le tout.
Je te tiens informé.

@ dessuite.
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 12h22   #10
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
Il faut que tu reprennes tout du début
nouveau document
coller sql1 seulement avec les champs dont tu as besoin cocde, naf, montant
nouveau tableau
coller sql2 idem nocde, naf, montant
Lier requête 1 et 2
vérifier nocde et naf en dimension
lier nocde
lier naf
insérer nouveau rapport
Avec le Gestionnaire de rapport
faire glisser
cocde naf montant de sql1 et indicateur de sql2
utiliser la fonction EstNul sur indicateur de sql2 dans le nouveau tableau
si ça marche ajouter sql 3 ...
__________________
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 20/01/2008, 12h29   #11
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Merci pour ton aide.

Maintenant au boulot...Je reprends tout..

@ bientôt
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 13h55   #12
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Salut Bruno2r,

Tu avais raison à 100%, j'ai lié les dates des bl avec celles des factures et du coup comme par enchantement tout fonctionne !

Quelle burne que je fais... Désolé pour cette perte de temps !

Mais j'ai pas trop saisie la notion de liéer des données, qu'elle est le sens de cette opération ? Synchroniser ou utiliser des données communes ?

Argh.. j'ai honte ...

Merci, mille fois merci.

Tu es un Dieu !
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 14h17   #13
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 LOPEZ Voir le message
Salut Bruno2r,

Tu avais raison à 100%, j'ai lié les dates des bl avec celles des factures et du coup comme par enchantement tout fonctionne !

Quelle burne que je fais... Désolé pour cette perte de temps !

Mais j'ai pas trop saisie la notion de liéer des données, qu'elle est le sens de cette opération ? Synchroniser ou utiliser des données communes ?

Argh.. j'ai honte ...
Amigo mio que no tienes veguenza !

Le Forum BO (le + BO des Forums) a pour objectif :
Entraide
Patience
Détermination
Astuce
Partage
Progrès
Passion .....

Jamais la honte n'a eu sa place ici, ni la moquerie, ni le jugement
Nous sommes tous meilleurs que d'autres et moins bons que d'autres
L'important est de progresser et celui qui explique progresse aussi à chaque explication.

Bref,
Lier un objet dimension de SQL1 avec un objet dimension de SQL 2 ramenant les mêmes données (même si les objets on des noms différents), opère une synchronisation des deux SQL
Cela permet d'afficher à côté des la liste exhaustive de valeurs de cette dimension dans les deux SQL les données de SQL1 et celles propres à SQL2
__________________
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 20/01/2008, 14h45   #14
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Je suis bien heureux, cela fonctionne nickel.

Il me reste à voir quelques points encore, mais cela devrait aller.
Je viens de m'initier aux joies de BO.
J'aimerais travailler sur des bases oracles mais c'est pas pour le moment...

Passe une bonne fin de Week-end.

Hasta pronto amigo mio.
LOPEZ 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 05h40.


 
 
 
 
Partenaires

Hébergement Web