Bonjour à tous,
J'utilise la base de données gratuite AdventureWorksDW2012 fournie par Microsoft pour tester un outil de reporting et y construire un prototype. (ce n'est pas mon sujet dans ce post, mais j'ai notamment pu tester des chargement de données avec une table de 30 millions de lignes grâce à ce script).
Je m'intéresse d'une part à la table FactFinance (1) me permettant de visualiser un compte de résultat et un bilan par année, devise, pays etc...
d'autre part je m'intéresse à la table FactResellerSales (2) me permettant d'analyser les ventes (chiffre d'affaire, promotions, coût de vente....). La table FactInternetSales donne le même type d'information pour un autre canal de ventes.
Je m'attends à ce que le chiffre d'affaires, les promotions, le coût de vente dans la table (1) se retrouve peu ou prou dans celui des tables (2). D'autres éléments (e.g. les salaires) en revanche ne peuvent pas se trouver dans les table (2) et je ne peux donc pas faire de contrôle de cohérence dessus.
Or j'ai le sentiment que les tables
- FactFinance d'une part
- FactResellerSales et FactInternetSales d'autre part
ne sont pas cohérentes.
Par exemple, le coût de vente est défini par
- AccountDescription in ('Standard Cost of Sales','Variances') dans FactFinance (via la table DimAccount)
- TotalProductCost dans les tables FactResellerSales et FactInternetSales
Lorsque je fais la somme de ces coûts par devise, j'obtiens :
la table FactFinance contient seulement 4 devises pour le coût de vente, alors que les tables des ventes FactResellerSales et FactInternetSales en contiennent plus (notamment GBP).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 -------------------------------------------------------------------------------------------------------- Currency TotalCostOfSales from FactFinance : AUD 1,541,604.89 CAD 8,424,631.57 EUR 2,448,597.52 USD 20,236,365.00 From FactResellerSales AUD 1,703,056.26 GBP 4,272,626.92 CAD 14,199,698.51 EUR 6,740,089.28 USD 53,064,643.42 From FactInternetSales DEM 142,211.49 AUD 5,371,031.72 GBP 1,999,809.86 CAD 1,045,363.86 FRF 108,108.26 USD 8,611,268.39
Et même s'il y avait des conversions cachées d'une devise vers l'autre, l'incohérence est aussi présente pour chaque devise, e.g. le dollar étasunien :
- FactFinance : 20 Millions de coûts de vente
- FactResellerSales 53 millions + FactInternetSales 8 millions.
ça ne colle pas...
lorsque j'applique ce raisonnement au chiffre d'affaires, j'obtiens les mêmes incohérences.
Est-ce que quelqu'un a déjà constaté ce problème et pourrait partager sa résolution ?
J'ai conscience que ce message ne doit pas intéresser grand-monde, car il concerne une version d'une base de données de test, mais sait-on jamais...
Merci d'avance pour votre aide.
Pour information, ma requête SQL est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31 SELECT distinct 'from FactFinance :','0' FROM dbo.FactFinance ff UNION ALL SELECT dc.CurrencyAlternateKey as Currency, FORMAT(sum(ff.Amount),'N','en-en') as TotalCostOfSales FROM dbo.FactFinance ff INNER JOIN dbo.DimAccount da ON ff.AccountKey = da.AccountKey INNER JOIN dbo.DimOrganization do ON ff.OrganizationKey = do.OrganizationKey INNER JOIN dbo.DimCurrency dc ON do.CurrencyKey = dc.CurrencyKey WHERE ff.ScenarioKey = 1 AND AccountDescription in ('Standard Cost of Sales','Variances')-- scenario = 1 to get only actual figures GROUP BY dc.CurrencyAlternateKey UNION ALL SELECT distinct 'From FactResellerSales','0' FROM dbo.FactFinance ff UNION ALL SELECT dc.CurrencyAlternateKey as Currency, FORMAT(sum(rs.TotalProductCost),'N','en-en') as TotalCostOfSales FROM dbo.FactResellerSales rs INNER JOIN dbo.DimCurrency dc ON rs.CurrencyKey = dc.CurrencyKey GROUP BY dc.CurrencyAlternateKey UNION ALL SELECT distinct 'From FactInternetSales','0' FROM dbo.FactFinance ff UNION ALL SELECT dc.CurrencyAlternateKey as Currency, FORMAT(sum(rs.TotalProductCost),'N','en-en') as TotalCostOfSales FROM dbo.FactInternetSales rs INNER JOIN dbo.DimCurrency dc ON rs.CurrencyKey = dc.CurrencyKey GROUP BY dc.CurrencyAlternateKey
Partager