Question

Je construis un entrepôt de données. Chaque fait a son timestamp. Je dois créer des rapports par jour, mois, trimestre, mais en heures aussi. En regardant les exemples que je vois que les dates ont tendance à être enregistrées dans les tables de dimension. alt starexample
(source: etl-tools.info )

Mais je pense que cela n'a aucun sens pour le temps. La table de dimension se développer et grandir. D'autre part JOIN avec table de dimension de date est plus efficace que d'utiliser les fonctions de date / heure dans SQL.

Quelles sont vos opinions / solutions?

(j'utilise Infobright)

Était-ce utile?

La solution

Je pense que cela dépend de votre exigence de déclaration. Si vous avez besoin besoin de quelque chose comme

WHERE "Hour" = 10

sens tous les jours entre 10:00:00 et 10:59:59, alors j'utilise la dimension temporelle, car il est plus rapide que

WHERE date_part('hour', TimeStamp) = 10  

parce que la fonction date_part () sera évaluée pour chaque ligne. Vous devez toujours garder le TimeStamp dans le tableau de fait afin d'agréger sur les frontières de jours, comme dans:

WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15' 

qui devient gênant lors de l'utilisation des champs de dimension.

En général, la dimension du temps a une résolution de minutes, donc 1440 lignes.

Autres conseils

recommande Kimball ayant des dimensions de temps séparés et la date:

conception -Tip-51-dernière pensée-sur-dimension temps-tables

  

Dans les livres de boîte à outils précédents, nous avons   recommandé la construction d'une telle dimension   avec la composante minutes ou secondes   de temps en tant que décalage à partir de minuit   chaque jour, mais nous sommes arrivés à réaliser   que l'utilisateur final résultant   applications sont devenues trop difficiles,   surtout lorsque vous essayez de calculer le temps   enjambe. En outre, contrairement à la journée de calendrier   dimension, il y a très peu   attributs descriptifs pour la   minute ou seconde spécifique dans un   journée. Si l'entreprise a bien   attributs définis pour les tranches de temps   dans un jour, comme les noms de décalage, ou   créneaux horaires publicitaires, un montant supplémentaire   dimension temps de jour peut être ajouté à   la conception où cette dimension est   défini comme étant le nombre de minutes (ou   même secondes) après minuit. ainsi, ce   dimension temps ofday devrait soit   1440 dossiers si le grain étaient minutes   ou 86.400 dossiers si le grain était   secondes.

Le temps devrait être une dimension sur les entrepôts de données, puisque vous voulez souvent agréger à ce sujet. Vous pouvez utiliser le flocon de neige-schéma pour réduire les frais généraux. En général, comme je l'ai souligné dans mon commentaire, les heures semblent comme une résolution exceptionnellement élevée. Si vous insistez sur eux, ce qui rend l'heure de la journée, une autre dimension peut aider, mais je ne peux pas vous dire si cela est une bonne conception.

Je recommande de dimension séparée pour la date et l'heure. Date Dimension aurait 1 record pour chaque date dans le cadre de la gamme valide identifiée de dates. Par exemple:. 01/01/1980 à 31/12/2025

Et une dimension séparée pour le temps ayant 86400 enregistrements avec chaque seconde ayant un enregistrement identifié par la clé de temps.

Dans les archives de fait, où le besoin d'u date et l'heure à la fois, ajoutez les deux clés ayant des références à ces dimensions conformes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top