每周汇总表;如何参考时间维度
Posted
技术标签:
【中文标题】每周汇总表;如何参考时间维度【英文标题】:Weekly summary table; how to reference the time dimension 【发布时间】:2010-09-16 23:51:36 【问题描述】:我们正在考虑在我们的小型数据仓库中添加一个每周汇总表。我们有一个经典的时间维度,直到每日级别(年/月/日),并带有适当的周/季度/等。列。
我们希望这个新的每周汇总表中的时间键引用我们的时间维度。这里的最佳实践是什么——让时间键引用它所代表的一周中第一天的 id?还是最后一天?还是完全不同的东西?
【问题讨论】:
【参考方案1】:按照惯例,具有日期期间聚合(周、月...)的事实表引用该期间最后一天的 DateKey -- 因此,对于本示例,您将引用最后一天星期几。
有点合乎逻辑,一周必须结束才能汇总。
重要的是要清楚地说明(在某处)事实表的粒度是一周,以便报表设计者意识到这一点。
【讨论】:
我还称它为事实表吗?它是我们事实表中一些数据的聚合。 好吧,factWeekySales
(或类似的)仍然是事实。它具有维度的 FK 和度量。粮食是一周。
我知道这是一篇旧文章,但你会为例如定义一个单独的表吗? factWeeklySales
、factDailySales
,或者您是否希望 factSales
带有 grain
列,即 weekly
或 daily
?
@d11wtq 我不会在单个事实表中混合粒度。【参考方案2】:
天是最好用自然键识别的实体的一个很好的例子——它们在公历中的表示。
要确定一周或一个月,最好使用第一天。在Oracle
中,您可以通过调用TRUNC
轻松检索它:
SELECT TRUNC(fact_date, 'month'), SUM(fact_value)
FROM fact
GROUP BY
TRUNC(fact_date, 'month')
在其他系统中,它稍微复杂一些,但也很容易。
【讨论】:
【参考方案3】:创建一个新的维度“周”怎么样?
如果需要,您可以创建时间和周维度之间的关系。
【讨论】:
【参考方案4】:建议一个较早的答案,我实际上希望通过附加到与 first 期间的某一天 - 这使得加载时(尤其是几个月 - 我猜几周可能总是需要一些计算)以及报告时更加直接 - 尽管如此,这是一个惯例,只要你选择一个常见的 -感觉选项(并坚持下去)你会没事的。
顺便说一句,不要创建周维度 - 您应该使用丰富的时间维度,其中包含年、季度、月、周、日等可用的所有层次结构(请记住,通常有多个独占的层次结构)和在这种情况下,only 还会推荐 20100920 形式的非无意义代理键 - 日期是不可变的,并且这种格式可以很容易地包含为 int 列,因此使用无意义的日期键(或在 dim_time 中)几乎没有价值- 如果您曾经不得不编写查询来取消引用数据,其中无意义的 SK 用于时间维度,您就会知道(不必要的)痛苦......
M
【讨论】:
丰富的时间维度恰好在日期的粒度上——如果你对一周中的第一个日期或类似的日期使用约定,你是在说你的事实是在日期的粒度上,而不是星期。 Kimball 确实会建议您创建一个缩小的维度,即以周为粒度的维度。以上是关于每周汇总表;如何参考时间维度的主要内容,如果未能解决你的问题,请参考以下文章