Bonjour
Ca a l'air d'un probleme classique, mais je ne trouve rien sur le forum...
Dans un datawarehouse, nous avons 3 tables liées par un right join et un inner join et les resultats ne sont pas bons.
On souhaite avoir toutes les valeurs de la dimension (MD=master data), meme si elles n'ont pas de ligne correspondante dans la table de fait (FACT) : dans ce cas le total affiché sera NULL.
(1) Query donnant des resultats partiels : le outer join ne semble pas fonctionner car on obtient la meme chose que si l'on fait un INNER JOIN entre MD et FACT, c'est a dire seulement les dimensions avec des lignes dans FACT
(2) Query donnant des resultats corrects (les valeurs de MD.DIMENSION sans TOTALEURO sont affichees) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT MD.DIMENSION, sum(fact.TOTALEURO) FROM T1_FACT fact RIGHT OUTER JOIN V1_MASTERDATA MD ON (MD.DIMENSION=FACT.DIMENSION) INNER JOIN V1_CALENDAR CAL ON (FACT.IDFISCALYEAR= CAL.NOYEAR and FACT.IDFISCALMONTH=CAL.NOMONTH) WHERE CAL.NOMONTH = 04 AND CAL.NOYEAR = 2011 GROUP BY MD.DIMENSION
Comme la query est générée par BO, on doit trouver une autre solution car one ne peut pas la réécrire telle qu'en (2), mais j'aimerais d'abord comprendre pourquoi cela ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT MD.DIMENSION, sum(fact.TOTALEURO) FROM (SELECT * FROM T1_FACT fact ,V1_CALENDAR CAL where FACT.IDFISCALYEAR= CAL.NOYEAR and FACT.IDFISCALMONTH=CAL.NOMONTH AND CAL.NOMONTH = 04 AND CAL.NOYEAR = 2011) F RIGHT OUTER JOIN V1_MASTERDATA MD ON (MD.DIMENSION=F.DIMENSION) GROUP BY MD.DIMENSION
A noter : V1_CALENDAR est une vue sur une table Calendar ,avec un where qui limite la liste des dates possibles
V1_MASTERDATA est une vue sur la table MasterData, avec un where qui limite les dimensions aux valeurs "courantes"
Je ne sais pas si cela peut avoir un impact sur la query.
Merci d'avance si quelqu'un a une explication et pourquoi pas une idée de remplacement
Isa
Partager