我正在为大型数据仓库中的客户发票创建数据模型。
下面显示了典型发票上的字段:
以下是迄今为止我为发票建模而制定的数据模型:
传统观念是大型数据仓库应该使用星型模式,这意味着一个事实表,但似乎要为发票建模,我需要两个事实表,如上所示。使用两个事实表是否正确?
我正在为大型数据仓库中的客户发票创建数据模型。
下面显示了典型发票上的字段:
以下是迄今为止我为发票建模而制定的数据模型:
传统观念是大型数据仓库应该使用星型模式,这意味着一个事实表,但似乎要为发票建模,我需要两个事实表,如上所示。使用两个事实表是否正确?
我建议您尽可能避免使用多个粒度事实表。
由于 Invoice Fact 包含Total Shipping
and Total Tax
,将其归结为 Invoice Detail Fact,我可以想到两个基本选项:
在您的发票明细事实中创建税和运费列并在您的项目中分配。这个 Kimball Tip 正好表明:http ://www.kimballgroup.com/2001/07/01/design-tip-25-designing-dimensional-models-for-parent-child-applications/ 。
对我来说效果很好的另一种方法是在您的产品维度中创建两个新成员。一份税费,一份运费。然后将这两个行项目添加到事实中,就像具有适当值的普通产品一样。
当您按发票 ID 进行分析时,您会得到包括税费和运费在内的总数。当您按单个产品进行分析时,您不会得到误导性的运费或税金数字。