最近开始在SSAS中实现多维模型。OLTP有一个表,其中存储了基于属性和实体列的多个度量。属性列具有不同的维名称。如果在一行中属性值为Dim1,则Entity列将具有Dim1值。类似地,属性列可以具有任何维度名称,其值将在实体列中。我们还有一些表,其中有多个属性和实体列。例如Attribute1和Attribute2。这两个都是维度名称,entity1和entity2存储它们各自的值。度量还取决于维度的顺序。具体地说,表存储在不同压缩下计算的风险值(VAR)值。在基金和行业压缩时计算的VAR与在行业和基金压缩时计算的VAR不同。OLTP将其存储为attribute1 (基金)、Attribute2(行业)、Entity1 (基金价值)和Entity2(行业价值)。使用where caluse where attribute1 =‘基金’和attribute2 =‘行业’或where attribute1 =‘行业’和attribute2 =‘基金’也很容易查询
如何在多维数据集中有效地对此进行建模?
我目前的方法是创建一个事实表,每个维度都有一个单独的not null外键列。如果我需要保存dimension1的数据,那么它的外键值将保存在dimension1中(这是Dimension1表的外键),其他维键(dimension2,dimension3..)将指向相应维度的N/A值。
如何改进这种方法?赞成和反对?如何在多维数据集设计中实现维度的排序
发布于 2015-09-01 18:16:04
我不确定你这么说到底是什么意思:
使用所有维度作为指向实际维度表的外键创建事实表
但这听起来像是错误的方法。
对于对事实表进行切片的每个维度,事实行都应该有一个单独的非空外键列。(即使其中一些偶尔指向特定维度中的特定“未知”成员)。换句话说,每个事实行都应该表示来自每个(相关)维度的特定成员的交集。
听起来你的问题是你的源系统受到了数据库反模式的困扰:通过简单地用(AttributeName,ObjectThisIsAnAttributeOfID,AttributeValue)创建行,而不是将这种关系定义为具有到主表的FK的表结构,通过允许即席添加属性来使属性“灵活”。
从这个数据结构中生成一个多维数据集设计结果需要进行大量的数据分析和转换:
您可能会发现(考虑到所涉及的工作量和时间),您只能对现有属性的一小部分进行建模。
请随时评论或回复更多细节,以防我误解了。
但从听起来,基本的问题是你的源系统没有断言任何关于“事物”和它们的属性之间的关系的规则。OLAP多维数据集设计涉及在初始设计时强烈断言这些类型的规则。
https://stackoverflow.com/questions/32327528
复制相似问题