【发布时间】:2015-09-01 09:01:42
【问题描述】:
最近开始在 SSAS 中实现多维模型。 OLTP 有一个表,它存储基于属性和实体列的多个度量。属性列有各种维度名称。如果连续属性值为 Dim1,则实体列将具有 Dim1 的值。同样,属性列可以具有任何维度名称,其值将在实体列中。我们还有一些表,其中有多个属性和实体列。例如属性 1 和属性 2。两者都是维度名称,entity1 和 entity2 存储它们各自的值。度量还取决于维度的顺序。具体而言,表格存储在不同压缩下计算的风险值(VAR)值。在基金和部门压缩计算的 VAR 与在部门和基金压缩计算的 VAR 不同。 OLTP将其存储为attribute1(Fund)、Attribute2(Sector)和Entity1(Fund's value)和Entity2(Sector's value)。使用 where caluse [where attribute1 = 'Fund' and attribute2 ='Sector'] 或 [where attribute1 = 'Sector' and attribute2 ='Fund'] 查询也很容易
如何在 Cube 中有效地建模?
我目前的方法是创建一个 Fact 表,其中每个维度都有一个单独的非空外键列。如果我需要保存维度 1 的数据,则其外键值将保存在维度 1(维度 1 表的外键)中,其他维度键(维度 2、维度 3 ..)将指向相应维度的 N/A 值。
如何改进这种方法?优点和缺点?立方体设计中如何实现维度的排序
【问题讨论】:
-
正如 SebTHU 所说,如果您可以编辑此内容以说明您尝试建模的各种业务概念是什么,这将很有帮助。您提到了部门、基金和 VAR——还有更多,还是只有这些?我认为当您需要建模的是业务流程和概念时,您可能过多地基于 OLTP 数据库结构,但是在讨论通用维度时很难说清楚。
-
另外,如果您认为了解当前表的结构会有所帮助,您能否向我们展示实际的结构(如果您需要匿名,请使用修改后的名称)而不是描述它们?
-
@Jo Douglass:问题已编辑。我们有几个指标,如 ImpliedVol、Vol、VAR 等,维度是 Fund、Symbol、Sector、Subsector、Country、Masterfund 等。我们需要一个事实表,这些指标可以存储用于不同的压缩,例如 Fund、Symbol、Fund 和符号、符号和基金、部门和基金。当我们进行资金压缩时,其他压缩(维度)的外键将指向该维度的 N/A 值。在获取数据时应如何维护(基金和符号)或(符号和基金)的顺序?
-
创建事实表时,您需要考虑粒度 - 如果您有一个存在于不同粒度的度量(当您说不同的压缩时听起来像,并且需要留下一些维度键为空),那么您将需要在不同的事实表中进行多个度量。如果您可以将每个度量拆分为最低粒度,则可以避免这种情况,仅将其保持在该级别,然后将其汇总在立方体中。您列出的业务概念之间是否存在任何自然层次结构?
-
@Jo Douglass:度量值不能在不同的grain之间聚合。自然层次结构确实存在。一个层次结构是基金 -> 符号。我们仍然无法将 Symbol Var 数相加得到 Fund var 数。
标签: database-design ssas cube olap-cube