无事实事实表的数据仓库维度设计
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
如果您需要更详细的答案,我们将需要更详细的列列表。
【讨论】:
以上是关于无事实事实表的数据仓库维度设计的主要内容,如果未能解决你的问题,请参考以下文章