Le forage latéral fait réfèrence au processus qui interroge plusieurs tables de faits et en combine les résultats dans un ensemble de données unique. Un exemple courant consiste à combiner les données prévisionnelles avec des données réelles. Les données prévisionnelles sont généralement conservées dans une table séparée, capturé à un niveau de détail différent de celui des données réelles. Quand un utilisateur veut un rapport qui compare le réel et le prévisionnel par client, la requête doit mixer deux tables de faits. (Note: les données des deux tables de faits peuvent être combinées uniquement si elles sont construites en utilisant des dimensions conformes. Le client, la date et toutes autres dimensions partagées doivent être exactement les mêmes dans les deux schémas en étoile).
Le moyen le plus efficace de combiner les données des deux tables de fait est d'exécuter des requêtes distinctes sur chaque table, puis de combiner les deux ensembles de résultats en faisant correspondre leurs attributs communs. Cette solution focntionne bien car la plupart des optimiseurs de base de données reconnaissent chaque requête unique et retournent rapidement les deux ensembles de résultats.
L'instruction SQL suivante est utilisée pour forer à travers deux schémas en étoile, ventes réelles et ventes prévisionnelles, associées aux dimensions Client et Date. La requête utilise des instructions SELECT dans la clause FROM pour créer deux sous-requêtes et joindre leurs résultats ensemble, exactement comme nous le souhaitions. Même si vous n'avez pas à écrire le SQL vous-même, vous aurez une idée de ce que votre outil décisionnel peut être fait.
SELECT Act.Client, Act.Année, Act.Mois, Montant_Réel, Montant_Prév
FROM
– sous requête “Act” retournant les résultats du réel
(SELECT Nom_Client AS Client, Année, Nom_Mois AS Mois, SUM(Montant_Ventes) Montant_Réel
FROM Faits_Ventes A
INNER JOIN Client C
ON A.Clé_Client = C.Clé_Client
INNER JOIN Date D
ON A.Clé_Date_Ventes = D.Clé_Date
GROUP BY Nom_Client, Année, Nom_Mois) Act
INNER JOIN
– sous requête“Fcst” retournant les résultat du prévisionnel
(SELECT Nom_Client AS Client, Année, Nom_Mois AS Mois, SUM(Montant_Prév) Montant_Prév
FROM Faits_Prev F
INNER JOIN Client C
ON F.Clé_Client = C.Clé_Client
INNER JOIN Date D
ON F.Clé_Date_Ventes = D.Clé_Date
GROUP BY Nom_Client, Année, Nom_Mois) Fcst
– Conditions de jointure condition pour nos deux sous ensembles de données
ON Act.Client = Fcst.Client
AND Act.Année= Fcst.Année
AND Act.Mois= Fcst.Mois
Cela devrait s'exécuter presque aussi rapidement que de faire les deux requêtes individuellement sur les tables de faits parce que la jointure se fait sur un sous-ensemble de données relativement petit qui est déjà en mémoire. Les résultats devraient ressembler à ceci:
Sous requête "Act":
Client Année Mois Montant_Réel
Big Box 2005 Mai 472,394
Small Can 2005 Mai 1,312,034
Sous requête "Fcst":
Client Année Mois Montant_Prev
Big Box 2005 Mai 435,000
Small Can 2005 Mai 1,257,000
Résultat final:
Client Année Mois Montant_Réel Montant_Prev
Big Box 2005 Mai 472,394 435,000
Small Can 2005 Mai 1,312,034 1,257,000
Rappelez-vous que si vous n'utilisez pas rigoureusement des dimensions conformes, vous ne pourrez pas comparer des pommes avec des pommes quand vous forerez!
Source originale: www.kimballgroup.com
Article original "Kimball Design Tip #68: Simple Drill accross in SQL", publié le 3 juin 2005.
Aucun commentaire:
Enregistrer un commentaire