【问题标题】:SSAS - Attribute Relationships in Natural HierarchySSAS - 自然层次结构中的属性关系
【发布时间】:2012-04-16 02:18:19
【问题描述】:

我发现很难正确理解在 SQL Server Analysis Services 2008 R2 中实现维度属性之间的属性关系的最佳用例场景。

根据我的阅读,出于性能原因,似乎应该避免“非自然层次结构”,而“自然”层次结构是首选的用户定义层次结构。

参考:http://support.microsoft.com/kb/2131988

话虽如此,我想问问你对以下场景的看法:

我有一个具有以下属性的维度:


维度名称: DimReserveData
维度成员:

节目线
覆盖代码
覆盖类型
覆盖状态


我想将这些属性按相同顺序放置在如下所示的层次结构中:

ReserveDataHierarchy
...................................
节目线
覆盖代码
覆盖类型
覆盖状态
.............................

层次结构信息:

计划行是代表所提供的保险范围计划的代码。 (例如:AA-23、BB-25、CC-78 等)

覆盖代码属性表示一个数字代码,代表为特定程序行提供的特定覆盖范围。 (例如:123、456 等)

覆盖类型表示与特定覆盖代码相关的覆盖类型。 (例如:车辆或身体)。

Coverage Status 表示给定 Coverage 的状态(打开或关闭)。

因此,关于层次结构中的基数,我们可以这样说:

一个程序行可以包含许多覆盖代码。
一个覆盖率代码可以包含多种类型。
一种覆盖类型可以包含许多状态值。

因此,浏览层次结构将产生以下属性和相应的成员:

DimReserveData
..................................................... ..................................................... *.................................
程序行 |覆盖代码 |覆盖类型 |覆盖状态 ..................................................... ..................................................... ..................................
AA-12 ....................123........................车辆...... ........打开
BB-14 ..................456........................车载...... .........关闭
CC-23 ....................123 ....车辆............ ........打开
DD-23 ....................456........................身体...... .............打开

我的问题是,在“自然”或“非自然”层次结构中对这些属性进行建模是否是一种好习惯。我想使用“自然”层次结构来提高性能。

显然,将此层次结构建模为“自然”需要使用属性关系。

回到我上面的示例层次结构,如果一个给定的覆盖代码属性属于多个程序行以及包含相同覆盖类型的多个覆盖代码,“自然”层次结构是否可能?

在这篇有用的帖子:http://sqlserverpedia.com/blog/sql-server-bloggers/idiots-guide-to-ssas-attribute-relationships/ 中提到,在一个城市属于多个州或省的场景中,可以修改属性键列,以便层次结构中的每个属性都是唯一定义的。

这在我上面的例子中有效吗?

我认为我可以像这样对属性关系进行建模:(使用 SSAS 2008 R2)

[来自维度的代理键属性]--> 覆盖状态--> 覆盖类型--> 覆盖代码--> 程序行

上面的每个属性的键列设置如下:

.......................
覆盖状态:
.....................
覆盖状态
覆盖类型

.......................
覆盖类型:
.....................
覆盖类型
覆盖代码

..................................
覆盖代码:
.....................
覆盖代码
节目单

..................................
节目线:
.....................
节目单

这行得通吗?这种情况是否更适合“不自然”层次结构?

非常感谢您花时间阅读我上面的帖子!

谢谢!

【问题讨论】:

  • 覆盖状态可能需要定义为程序行、覆盖代码、覆盖类型和覆盖状态的组合。覆盖类型基于程序行、覆盖代码、覆盖类型。

标签: sql attributes ssas hierarchy relationship


【解决方案1】:

如果您必须在层次结构中包含这些,请强制它是自然的。与仅使用不自然的层次结构相比,您将付出更少的性能损失。强制自然层次结构的惩罚主要与键大小的增加有关(因为您将使用复合键来自然化层次结构)。

但也许您应该考虑通过将这些属性强制到用户层次结构中来尝试实现什么?

是为了简化一些 MDX 查询吗? 是不是维度太宽(与key直接相关的属性太多)导致处理时内存压力?

如果答案只是为用户界面(例如 Excel)对这些属性进行分组,您可能需要考虑简单地使用允许这些属性按您喜欢的顺序出现的命名约定...

【讨论】:

  • 谢谢 iPolvo,现在这完全有道理了。
【解决方案2】:

Microsoft 删除了您引用的 KB(参考:http://support.microsoft.com/kb/2131988

我对在那里管理 KB 内容的人感到非常沮丧。有人需要将手指从 DEL 键上移开!那是我的知识库,我可能花了一个多星期的时间帮助 MS 记录非自然层次结构中的意外问题(相对于属性的等效交叉连接)!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2011-04-23
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多