我们正考虑将每周摘要表添加到我们的小数据仓库中。我们将经典时间维度降至每日水平(年/月/日),并使用适当的周/季/等。列。
我们希望在这个新的每周汇总表中有时间键参考我们的时间维度。这里的最佳做法是什么 - 时间键引用它代表的一周中第一天的ID?还是最后一天?还是完全不同的东西?
答案 0 :(得分:0)
天数是通过自然键最佳识别的实体的一个很好的例子 - 它们在公历中的表示。
要确定一周或一个月,最好使用第一天。在Oracle
中,您可以通过调用TRUNC
轻松检索它:
SELECT TRUNC(fact_date, 'month'), SUM(fact_value)
FROM fact
GROUP BY
TRUNC(fact_date, 'month')
在其他系统中,它有点复杂但也很容易。
答案 1 :(得分:0)
如何制作新的“维周”?
如果需要,您可以在时间和星期维度之间创建关系。
答案 2 :(得分:0)
按照惯例,具有日期周期聚合(周,月......)的事实表引用该期间最后一天的 DateKey - 因此,对于此示例,您将引用最后一天一周中的某一天。
也有道德,周必须结束以便汇总。
重要的是要清楚地说明(某处)事实表的粒度为一周,以便报告设计者意识到这一点。
答案 3 :(得分:-1)
Apropos早期的回答我实际上希望存储与时间维度层次结构的临时级别相关联的数据 - 当它与该临时时间段的原子测量相关时 - 通过首先附加到与关联的键期间的一天 - 这使得加载时更加直接(特别是几个月 - 我想几周可能总是需要一些计算)以及报告时 - 尽管如此,这是一个惯例,只要你选择一个共同的 - 感觉选项(并坚持下去)你会没事的。
BTW不会创建周维度 - 您应该使用丰富的时间维度,其中包含年内,季度,月,周,日等所有可用的层次结构(请记住,通常有多个独有的层次结构)和在这种情况下,只会推荐20100920形式的非无意义的代理键 - 日期是不可变的,并且这种格式可以很容易地作为int列包含,因此使用无意义的键作为日期(或者在dim_time中)几乎没有价值 - 如果您曾经不得不在解引用数据中编写查询,其中无意义的SK用于时间维度,您就会知道(不必要的)痛苦......中号