繁体   English   中英

事实表建议

[英]Fact Table Recommendation

我有一个数据集市,只需要捕获产品的序列号,活动的日期以及活动发生的位置(哪个帐户)。

有五种可能的活动。 我的问题是这个。 其中两项活动在仓库级别进行。 其余三个发生在帐户级别(WH不适用)。 最终,每个仓库最终都汇总到一个主帐户。

因此,如果我有一个事实表,则基本上需要两个FK,并且您必须遍历事实表才能构建WH>帐户层次结构,这似乎很难维护。 我想要一维表。

还是建议我将其分为两个事实表,即使每个表的唯一不同之处是活动是否在仓库进行。

报告的目标将在帐户级别,但是在某些时候拥有WH信息可能会有用。 而且我需要检查是否有重复项,这就是为什么我倾向于第一个,但是不知道如何适当地处理层次结构的原因。

单事实表设计

  • 项目:1
  • 帐户:14
  • 仓库:2
  • 活动类型:3
  • 日期:20130204
  • 编号:123456
  • 数:1

双事实表设计

表格1

  • 项目:1
  • 仓库:2
  • 活动类型:3
  • 日期:20130204
  • 编号:123456
  • 数:1

表2

  • 项目:1
  • 帐号:2
  • 活动类型:3
  • 日期:20130204
  • 编号:123456
  • 数:1

我已经将您的情况解释为:

  • 所有活动都需要一个帐户
  • 一些活动涉及仓库。
  • 仓库的选择意味着一个帐户。 上面两点提到的科目是同一类型(只有1个科目维度表)

在这种情况下,您应该可以使用单个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM