1

我想现在是我关于 stackoverflow 的第一个问题的时候了。直到现在,我总能找到问题的答案,但现在我有一个关于事实表设计的非常具体的问题。现在我有一个事实表,问题是,我是否应该把它分成三个事实表。目前该表如下所示:

d_date | d_customer | d_filter | d_x | d_y | metric 1 | metric 2 | metric 3

我的数据库的数据是通过三个不同的查询从源系统返回的:

  1. 查询 1 返回具有维度日期、客户和过滤器的数据。这个返回每个客户的总数。
  2. 查询 2 返回包含日期、客户、过滤器和d_x.
  3. 查询 3 返回包含日期、客户、过滤器d_xd_y.

专长:查询 2 和 3 的聚合彼此不同,也与查询 1 不同。但这很好,源系统就是这样工作的。

因为我不需要所有数据集的所有维度,所以我在维度中创建了虚拟行。因此,对于查询 2,在其中有一个虚拟行d_y,对于查询 1,在 and 中有一个虚拟d_xd_y

但是随着查询变慢,我开始阅读有关最佳实践的书籍,以及应该按粒度拆分事实表的红色书籍。也许这个问题没有真正的最佳实践,因为源系统非常奇怪,但在这种情况下,一个选项必须比另一个更好。保留一个事实表或将其拆分为三个事实表。

我希望你能理解这个问题。

4

1 回答 1

0

在不知道更多细节的情况下,我会说是的,你应该有 3 个事实表。

作为一般原则,事实表应该具有相同粒度的数据,并且您通过添加虚拟维度值人为地为某些事实记录创建相同的粒度。

如果您想/需要一起报告这些,我会将它们创建为三个单独的事实表,然后在进行组合的事实表上创建一个视图。

于 2016-03-05T23:29:24.407 回答