[英]Fact Table Recommendation
我有一个数据集市,只需要捕获产品的序列号,活动的日期以及活动发生的位置(哪个帐户)。
有五种可能的活动。 我的问题是这个。 其中两项活动在仓库级别进行。 其余三个发生在帐户级别(WH不适用)。 最终,每个仓库最终都汇总到一个主帐户。
因此,如果我有一个事实表,则基本上需要两个FK,并且您必须遍历事实表才能构建WH>帐户层次结构,这似乎很难维护。 我想要一维表。
还是建议我将其分为两个事实表,即使每个表的唯一不同之处是活动是否在仓库进行。
报告的目标将在帐户级别,但是在某些时候拥有WH信息可能会有用。 而且我需要检查是否有重复项,这就是为什么我倾向于第一个,但是不知道如何适当地处理层次结构的原因。
单事实表设计
双事实表设计
表格1
表2
我已经将您的情况解释为:
在这种情况下,您应该可以使用单个FACT表设计:
[ACTIVITY_FACT]
SK (Optional, i find unique surrogate PKs useful)
ITEM_SK (Link to your ITEM_DIM table)
ACCOUNT_SK (Link to your ACCOUNT_DIM table)
WAREHOUSE_SK (Link to your WAREHOUSE_DIM table, -1 for no warehouse activities)
ACTIVITY_TYPE_SK (Link to your ACTIVITY_TYPE_DIM table)
ACTIVITY_DATE_SK (Link to your DATE_DIM table)
ITEM_SERIAL_NUMBER
ITEM_COUNT
在您的WAREHOUSE维度中有一个记录NONE或NOT APPLICABLE,并为其分配一个明显的特殊条件SK值-1或-9或您的商店用于此类事情的任何值。
对于引用仓库的活动记录,请放置适当的仓库sk和属于该仓库的科目sk。
对于不涉及仓库的活动,请在仓库sk中填充NONE / NOT APPLICABLE仓库维记录和相应的帐户SK。
现在,您的事实表可以连接到“帐户”和“仓库”维表,而不必担心外部联接或空条件处理。 这将使您和您的用户可以根据需要使用仓库维度数据,而不必费心管理两个包含相同日期的表。
一种可能性是在单个维表中定义层次结构。 在猜测您要处理的内容时,我提出了以下建议。
尺寸表概述:
TABLE: Account
Account_ID <surrogate key>
Account <Account name, identifier>
Warehouse (Warehouse name, identifier)
样本数据:
Account_ID Account Warehouse
1 A n/a
2 B n/a
3 C n/a
4 W wh1
5 W wh2
6 Z wh3
7 Z n/a
Account_ID只是一个代理密钥,没有内在的含义或值
帐户列出帐户。 在这里,我显示了五个,分别是A,B,C,W和Z。 通过Account_ID加入一个事实表,其中Account =“ W”获取该帐户的所有数据(但适用于许多仓库)。
仓库列出所有仓库及其关联的帐户; 在这里,“ W”是两个单独仓库(wh1,wh2)的帐户; Z与仓库wh3相关联,但具有“无”仓库的事实表也可以使用Z。 通过Account_ID加入一个事实表,其中Warehouse =“ wh1”获取该仓库的所有数据。
使用此功能,在事实表中使用Account_ID,您可以细化任何给定帐户或特定仓库的所有条目(或如果没有价值,则无仓库)。
这种方法可能有很多变化和排列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.