2014-10-29 255 views
0

我有一些MDX在我的SSAS多维数据集是这样的:MDX范围赋值返回值相同

CREATE MEMBER CURRENTCUBE.[Measures].[xx] AS 1; 

SCOPE ([Measures].[xx]); 

    SCOPE ([Measures].[xx], [DimA].[DimA Hierarchy].Members); 
     This= 20; 
    END SCOPE; 

    SCOPE ([Measures].[xx], [DimB].[DimB Hierarchy].Members); 
     This= 2; 
    END SCOPE; 

END SCOPE; 

浏览立方体和选择[xx]的措施总是返回2,不管我用迪马,DimB或根本没有尺寸。

如果我交换内部作用域删除的顺序(即DimB在DimA之前的作用域),无论如何,我都会得到20个作用域。

显然我做错了什么?

回答

0

SCOPE只有在层次结构成员的子集上使用它时才有意义。

[DimB].[DimB Hierarchy].Members[DimA].[DimA Hierarchy].Members对范围没有影响,因为它们指的是所有层次结构的成员。因此,其中一个始终是当前成员,而最后一个范围总是被使用。除了在该层次上定义一个计算成员,并且它是当前成员。

您可能希望至少排除All成员,以便SCOPE仅用于此成员的其他成员,如果您根本不使用层次结构,则默认为当前成员。在DimA Hierarchy是属性层次结构而不是用户层次结构的情况下,可以使用[DimA].[DimA Hierarchy].[DimA Hierarchy].Members获取DimA Hierarchy级别的成员,这些成员都是除All成员之外的所有成员。

+0

好了,这是有道理的。谢谢。 – user2999794 2014-11-04 14:03:59

0

尝试这样:

CREATE MEMBER CURRENTCUBE.[Measures].[xx] AS 1; 

SCOPE ([Measures].[xx]); 

    SCOPE ([DimA].[DimA Hierarchy].Members); 
     This= 20; 
    END SCOPE; 

    SCOPE ([DimB].[DimB Hierarchy].Members); 
     This= 2; 
    END SCOPE; 

END SCOPE;