SSAS - 如何处理具有有效重复项的维度?
Posted
技术标签:
【中文标题】SSAS - 如何处理具有有效重复项的维度?【英文标题】:SSAS - How do I handle dimensions with valid duplicates? 【发布时间】:2013-09-15 21:51:13 【问题描述】:我是 SSAS 新手,遇到了一个无法解决的问题。让我们从两张表开始,这是一张包含账户及其值的事实表:
Fact Table
==============
Account Value
==============
1 10
2 20
3 30
然后是提供维度的帐户层次结构表。此维度包含帐户层次结构。帐户被分组到组中,一个给定的帐户可以根据需要多次放置在几个不同的组中。不可能在同一组内拥有两次或多次相同帐户的情况。出于性能原因,使用HideMemberIf
属性对层次结构进行了自然化(这是正确的术语吗?)。群体本身没有价值,他们从孩子的集合中获取价值。真正的层次结构有 16 个级别,但为简单起见,这里是一个只有 4 个级别的示例:
Dim Groups-Accounts
========================================
Level 0 Level 1 Level 2 Level 3
========================================
Group 0 Group 0 Group 0 Group 0
Group 0 Group 1 Group 1 Group 1 (empty group)
Group 0 Group 2 Group 2 Group 2
Group 0 Group 2 Account 1 Account 1
Group 0 Group 3 Group 3 Group 3
Group 0 Group 3 Account 2 Account 2
Group 0 Group 3 Account 3 Account 3
Group 0 Group 4 Group 4 Group 4
Group 0 Group 4 Group 5 Group 5
Group 0 Group 4 Group 5 Account 2
Group 0 Group 4 Group 5 Account 3
Group 6 Group 6 Group 6 Group 6 (empty group)
在导航维度时,这将导致如下结果:
======================================
Level 0 Level 1 Level 2 Level 3
======================================
Group 0
Group 1
Group 2
Account 1
Group 3
Account 2
Account 3
Group 4
Group 5
Account 2
Account 3
Group 6
目标是将归化层次结构的最后一级(在本例中为 3 级)与事实表中的适当值相关联:
=================================================
Level 0 Level 1 Level 2 Level 3 Value
=================================================
Group 0 110
Group 1 0
Group 2 10
Account 1 10
Group 3 50
Account 2 20
Account 3 30
Group 4 50
Group 5 50
Account 2 20
Account 3 30
Group 6 0
问题?在处理维度时,SSAS 抱怨 Errors in the OLAP storage engine: A duplicate attribute key has been found when processing: Table: 'CT_DimGroupsAccounts', Column: 'Level_3', Value: 'Account 2'. The attribute is 'Level_3'.
。这是真的,因为帐户 2 和帐户 3 在级别 3 属性中是重复的。如果我告诉 SSAS 忽略重复键错误,则处理成功结束。但是,当导航生成的多维数据集时,结果是:
=================================================
Level 0 Level 1 Level 2 Level 3 Value
=================================================
Group 0 60
Group 1 0
Group 2 10
Account 1 10
Group 3 50
Account 2 20
Account 3 30
Group 4 0
Group 5 0
Group 6 0
重复的键(帐户 2 和 3 作为组 5 的子项)不在维度中,结果不正确。在这种情况下,我怎样才能获得正确的结果?
【问题讨论】:
如果账户 2 上发生交易,是什么决定了该交易是通过第 3 组还是第 5 组?还是总是两者都经历? 在这种情况下,它应该始终通过两个组。而在真实维度中,如果一个账户被更新,那么该账户在维度中的每一次出现都应该被更新。 看我的回放here,希望对你有帮助 【参考方案1】:在极少数情况下,这可能会发生。由于层次结构需要一个独特的解决方案,这就是您可以在 SSAS 维度结构中解决问题的方法,如果您在维度表上有一个基于整数的主键,则可以采用这种方法。
1) 对于维度结构中的每个属性,在属性部分中,您有一个定义的 KeyColumns。默认值为列本身。当您有重复项时,扩展属性的定义键以包含一列或多列:如下:
属性 -> 键列
------------------- -------------------
MyTopLevelAttribute -> 我的TopLevelAttribute
NextLevel1Attribute -> NextLevel1Attribute + uniquetablePK
如果您没有唯一键,您仍然可以使用其他可提供唯一值的列来构建较低级别的键列,但您应该采用这种方法。关键是扩展 KeyColumns 属性。
【讨论】:
【参考方案2】:在属性之间提供适当的关系。创建父子层次结构。并提供它们之间的关系。它应该可以正常工作..
【讨论】:
以上是关于SSAS - 如何处理具有有效重复项的维度?的主要内容,如果未能解决你的问题,请参考以下文章