我是否可以通过不同的源查询分割事实表? Datawarehouse最佳实践

问题描述:

我认为是我在stackoverflow上的第一个问题的时候了。直到现在,我总是找到对我的问题的答案,但现在我对事实表设计有一个非常具体的问题。 现在我有一个事实表,问题是,如果我应该把它分成三个事实表。目前,该表看起来是这样的:我是否可以通过不同的源查询分割事实表? Datawarehouse最佳实践

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,在d_xd_y中存在虚拟行。

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

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

大体上不知道更多的细节,我会说是的,你应该有3个事实表。

事实表应该作为一般原则,将数据放在相同的颗粒上,并通过添加虚拟尺寸值人为地为某些事实记录创建相同颗粒。

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