繁体   English   中英

为什么事实表中的维成员集通常用作组合键?

[英]Why do the set of dimension members in a fact table are typically used as a composite key?

根据我的研究,“最佳实践”似乎表明事实表中的行将具有一个包含所有维度量度的组合键:例如,如果我在事实表中的量度是“销售额”,而我有四个维:“位置,销售人员,buyerCat,salesMonth”,那么我的组合键将包含这4个维的唯一值。 但这会在以后引起严重的问题:如果我有两个具有唯一维度集的度量,该怎么办?

  --Example: Fact table row: 
  Sales Amount: $100, location: US, salesperson: Bob, buyerCat: Young, salesMonth: Feb/2010
  Sales Amount: $640, location: US, salesperson: Bob, buyerCat: Young, salesMonth: Feb/2010 

然后,仅因为所有维成员都被用作组合键,才可以阻止此措施进入数据集市。 我不正确吗?

如果发现这是有问题的,那么您可能需要查看数据模型并质疑为什么要加载使用完全相同维度的多行。

在您提供的示例中,大概这些实际上是不同的销售额。 如果是这样,它们可能发生在不同的日期-但是您仅以月为单位进行记录,因此您丢失了该数据。 如果您包含确切的日期作为维度,那么重复的问题就消失了。 或者,如果两次销售可以在同一天进行,则可能有一笔销售记录中的交易编号可以记录下来并用作退化维-再次,您将不再拥有使用相同维的行。

交易事实表应基于事件对事物进行建模(在您的示例中为销售发生),并且它们应引用足够的维度以唯一地标识该事件的每个特定事件。

如果您真的不关心将数据保留到最细的粒度,那么您所构建的不是事务事实表,而是诸如定期快照事实表之类的东西。 在这种情况下,您应该对这两行进行汇总,以使只有一行的销售额为740美元。

但是,我将非常谨慎地以这种方式构建仓库,而不是构建下降到最低粒度的交易事实表-即使现在没有人想要报告或分析到那个水平,他们可能希望稍后继续,那么重构数据仓库和ETL以降低工作量将很痛苦。 而如果您首先以尽可能低的粒度创建事务事实表,则始终可以汇总-无论您的用户是使用SSAS之类的OLAP工具进行此操作,还是创建一些汇总表或视图以使其更易于报告。

最好避免为此使用组合键或任何与业务相关的键来唯一标识事实表行。 我可以保证,您会找到许多共享相同维键的记录。 使用Kimball网站提供的步骤清楚地定义事实表粒度,而您无需担心事实行的唯一性

除非您将组合键定义为唯一键,否则您可以拥有任意数量的重复键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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