无事实事实表的数据仓库维度设计

Posted

技术标签:

【中文标题】无事实事实表的数据仓库维度设计【英文标题】:Data Warehouse Dimension Design for Factless Fact Table 【发布时间】:2013-06-25 12:16:20 【问题描述】:

我有一个关于我要开始的新 Cube 的问题。

多维数据集与风险管理流程相关。事实表不会包含任何事实,只是存在的风险列表。

我对此表的维度有疑问,风险前有很多属性:

项目开始前的发生概率:(高、中、低) 项目期间发生的概率:(高、中、低) 项目结束后的发生概率:(高、中、低)

风险严重程度:(高、中、低) 策略:(接受、减少、分享)

我不确定是否应该将这些类型的属性视为 Dimension 或将它们作为 Fact Row 的一部分。然后用户可以按值进行过滤。

如果它们应该是维度如何处理它们: 1) 事实维度(退化维度) 2) 新维度(将数据移动到自己的表中) 3) 将相似概念的维度组合起来,例如:发生概率到一个维度并添加一个类型属性[注意:这些类型的属性有很多我没有提到]

感谢任何帮助

【问题讨论】:

这是多维还是表格? 【参考方案1】:

如果您有很多列的值为High, Medium, Low,那么我建议您创建单独的维度,您可以在其中拥有例如以下属性:

 ProbabilityKey
 ProbabilityLevelShort (H,M,L)
 ProbabilityLevelLong (High, Medium, Low)
 ProbabilityLevelInt (1,2,3)
 ProbabilityLevelPct (0,0.5,1)
 ProbabilityLevelPctDesc (0%, 50%, 100%)

这将有助于您经常需要将这些值转换为某些标签或执行其他类型的分析(例如 ProbabilityLevelInt 的总和)的报告级别。最终维度可能看起来像(只有前三列):

risk_dimension(ProbabilityKey,ProbabilityLevelShort,ProbabilityLevelLong)
1     H    High
2     M    Medium
3     L    Low

您可以对策略列执行几乎相同的操作。如果您没有太多类型的列,您可以结合概率级别和策略创建垃圾维度,例如:

junk_risk_dimension(ProbabilityKey,ProbabilityLevelShort,ProbabilityLevelLong,StrategyLong)
1     H    High       Accept
2     M    Medium     Accept
3     L    Low        Accept
4     H    High       Reduce
5     M    Medium     Reduce
6     L    Low        Reduce
7     H    High       Share
8     M    Medium     Share
9     L    Low        Share

然后,在您的事实表中,您只有指向这个垃圾维度的指针:

risk_fact_table
record_id   dim_key  some_other_key
1            1
2            1
3            2
4            3
5            4
6            5

如果您需要更详细的答案,我们将需要更详细的列列表。

【讨论】:

以上是关于无事实事实表的数据仓库维度设计的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库设计

Hadoop之数据仓库设计

Hadoop之数据仓库设计

二数据仓库模型设计

二数据仓库模型设计

数据仓库设计要点