|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
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 |
|
|
00
|
|
|
#2 | |||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Citation:
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 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 :
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|||
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
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. |
|
|
00
|
|
|
#4 | |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Citation:
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 !!!" |
|
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
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 |
|
|
00
|
|
|
#6 | ||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
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 :
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 !!!" |
||
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
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 |
|
|
00
|
|
|
#8 | ||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Utiliser la fonction EstNul(<variable)
Code :
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
||
|
|
00
|
|
|
#9 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
Salut Bruno2r,
Cela ne fonctionne toujours pas, je vais essayé en synchronisant le tout. Je te tiens informé. @ dessuite. |
|
|
00
|
|
|
#10 |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
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 !!!" |
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
Merci pour ton aide.
Maintenant au boulot...Je reprends tout.. ![]() @ bientôt |
|
|
00
|
|
|
#12 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
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 ! |
|
|
00
|
|
|
#13 | |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Citation:
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 !!!" |
|
|
|
00
|
|
|
#14 |
|
Futur Membre du Club
![]() Inscription : mars 2002 Messages : 46 ![]() |
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.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com