-3

背景:我正在尝试为数据仓库设计星型模式。我们有以下商业模式,我们的客户可以购买并使用的产品很少。客户是公司,然后他们的组织中有人员可以映射到他们为产品带来的许可证。

我有以下尺寸。

Account_dim:该维度包含我们当前/未来与我们公司合作的所有公司列表。它可能有那些仍然没有与我们签订合同并且仍处于讨论阶段的公司。所以有些行可能没有合同。

User_dim:这是公司为其公司指定联系人的用户列表。因此,用户将属于 Account_dim 中的一个特定帐户。一个帐户可以有多个用户。

Product_Dim:此维度包含有关我们销售的所有产品的所有信息。许可证的成本以及许可证允许多少用户。因此,例如,如果他带来产品 A,最多两个用户可以使用它。

现在我有三个表,其中包含有关合同的数据。

合同:它包含有关我们拥有的合同的信息,其中包括合同开始日期和结束日期以及该合同分配到的帐户。

products_bought:此表包含根据合同带来的产品。一份合约可以持有多个购买的产品。每个产品行都有产品开始日期/结束日期和客户支付的资产价格。

分配的用户:每个购买的产品都可以有用户映射到它,这些用户被允许使用该帐户的 user_dim 中的用户。基本上将许可证附加给用户。

我正在尝试对合同、购买的产品和分配的用户进行建模,以便生成以下数据。

  1. 帐户在产品上花费的金额。
  2. 帐户对许可证的使用。例如,一个帐户有一个允许 3 个用户的产品,但只有一个用户映射到它,这将显示该产品未得到充分利用。

我尝试将所有三个表非规范化为一个事实表,但我遇到了问题,即如果合同结束日期延长,则可以更改。以及新资产可以映射到它。最后同样重要的是,公司可以删除一个用户,然后将另一个用户映射到产品或删除用户,因为他们离开了公司或添加了更多用户。

如何最好地建模。因为他们的合同和资产用户可以更改,所以它们应该是 SCD 而不是事实表,或者我应该如何实现一个事实来处理这些更改以及必须捕获这些更改以保持随时间推移的使用历史。

4

1 回答 1

0

你最好的选择是阅读一本关于如何设计数据仓库的书:数据仓库生命周期工具包,因为这将为你提供回答此类问题所需的所有信息。

但是,要专门解决您的问题,解决此问题的最佳方法如下:

  1. 定义您的度量:您希望能够在报告中汇总哪些值
  2. 定义每个度量的粒度:唯一标识每个度量的维度是什么。例如,交易金额可能由商店、客户和日期/时间定义;如果你放弃了其中任何一个,那么交易金额就会改变;如果您添加了另一个维度,例如降雨量,它不会改变交易金额(注意,已经定义了度量的粒度,您不应该添加会改变粒度的维度,例如产品维度,在本例中)

一旦你定义了你的度量和它们的粒度,你可以向它们添加所有其他维度(这不会影响它们的粒度),然后决定是将它们保存在单独的事实表中还是将它们合并到一个事实表中:

  1. 规则:如果两个度量的粒度不同,则不能将它们放在同一个事实表中
  2. 指导:对于符合上述规则的度量,如果您希望用于每个度量的其他维度也存在显着重叠,则考虑将它们组合成一个事实表。我的经验法则是,如果您有 2-3 个维度不适用于所有度量,那没关系;如果您达到 5 或更多,那么您可能需要考虑将度量拆分为单独的事实
于 2020-11-16T12:42:58.737 回答