Considérant que vous avez marqué ce poste avec data-warehouse
et datamart
, je ne peux que supposer que votre table de FT est une sorte de fait et que la requête ressemble à quelque chose comme:
select
CalendarMonth
, sum(x) as Tot_1
, sum(x) * sum(y) as Tot_2
, sum(x) + sum(z) as Tot_3
from FT as f
join dimDate as d on d.DateKey = f.DateKey
join dimUser as u on u.UserKey = f.UserKey
join dimProduct as p on p.ProductKey = f.ProductKey
where CalendarYear between 2008 and 2010
and Country = 'United States'
and ProductCategory = 'Cool Gadget'
and UserGender = 'Female'
group by CalendarMonth ;
Quelle est exactement comment un agrégation sur les mesures dans une table de faits devrait ressembler. Maintenant, à des fins de création de rapports, il semble que vous ayez une table d'agrégation (FA) pour accélérer les rapports. Je peux seulement deviner que l'entrepôt est chargé pendant la nuit et que votre requête prépare l'agrégation parfois le matin, avant les heures d'ouverture, de sorte qu'elle s'exécute une fois par jour - ou du moins est supposée le faire. Si cette requête prend trop de temps à s'exécuter, pensez à ajouter quelques champs clés à votre table d'agrégation (FA), généralement DateKey, puis à mettre à jour la table FA périodiquement. Par exemple, si vous avez 10 000 ventes par jour que la requête ci-dessus somme ~ 300 000 lignes pour chaque mois. Si la table d'agrégation est agrégée par jour, il faut une somme de 10 000 lignes une fois par jour pour mettre à jour la table et une somme de seulement 30 lignes par mois pour un rapport. Pour résumer, afin d'accélérer les requêtes d'agrégation de faits se concentrer sur le nombre de lignes qui sont agrégées - pas sur les fonctions d'agrégation. Assurez-vous également que les tables de dimension possèdent des index sur les colonnes mentionnées dans la clause WHERE de la requête.
Certes, j'ai peut-être supposé trop ici, donc cela peut ou ne pas être utile.
Il ne devrait pas, mais pourquoi ne pas tester et voir? –