按层次结构的多个成员过滤

时间:2013-06-14 19:44:40

标签: sql-server-2008-r2 ssas mdx dimensions olap-cube

所以我想说我有这个MDX查询:

select 
    NON EMPTY {([Dim 1].[Member 1].[Member 1])} on columns
    ,NON EMPTY {([Dim 2].[Member 2].[Member 1])} on rows
from [Cube 1]
where
{(
    [Dim 3].[Hierarchy 3].[Member 3].&[Value 3]
    ,[Measures].[Measure 1]
)}

但现在我也需要过滤,就像我使用 [Dim 3]。[Hierarchy 3]。[Member 3]。& [Value 3] ,但有几个成员值来自不同维度的层次结构,让我们调用它们:

[Dim 4].[Hierarchy 4].[Member 4].&[Value 2]
[Dim 4].[Hierarchy 4].[Member 4].&[Value 4]
[Dim 4].[Hierarchy 4].[Member 4].&[Value 8]

我试过这个:

select 
    NON EMPTY {([Dim 1].[Member 1].[Member 1])} on columns
    ,NON EMPTY {([Dim 2].[Member 2].[Member 1])} on rows
from [Cube 1]
where
{(
    [Dim 3].[Hierarchy 3].[Member 3].&[Value 3]
    ,[Dim 4].[Hierarchy 4].[Member 4].&[Value 2]
    ,[Dim 4].[Hierarchy 4].[Member 4].&[Value 4]
    ,[Dim 4].[Hierarchy 4].[Member 4].&[Value 8]
    ,[Measures].[Measure 1]
)}

得到了这个:

The 'Hierarchy 4' hierarchy appears more than once in the tuple.

也试过这个(我知道,这里没什么意义):

select 
    NON EMPTY {([Dim 1].[Member 1].[Member 1])} on columns
    ,NON EMPTY {([Dim 2].[Member 2].[Member 1])} on rows
from [Cube 1]
where
{(
    [Dim 3].[Hierarchy 3].[Member 3].&[Value 3]
    ,[Dim 4].[Hierarchy 4].[Member 4].&[Value 2]
    :[Dim 4].[Hierarchy 4].[Member 4].&[Value 4]
    :[Dim 4].[Hierarchy 4].[Member 4].&[Value 8]
    ,[Measures].[Measure 1]
)}

得到了这个:

The : function expects a member expression for the 2 argument. A tuple set expression was used.

我对MDX相当陌生(在T-SQL方面更有经验),甚至不知道究竟是什么谷歌,因为我的愚蠢。

欢迎任何帮助。

先谢谢。

2 个答案:

答案 0 :(得分:4)

得到它:http://msdn.microsoft.com/en-us/library/ms146047.aspx

  

如果要使用同一层次结构中的多个成员,则需要   在WHERE子句中包含一个集合

另一件事,在我的例子中Dim 2 = Dim 3,所以为了得到我希望我需要的结果:

select 
    NON EMPTY {([Dim 1].[Member 1].[Member 1])} on columns
    ,NON EMPTY 
       {(
          [Dim 2].[Hierarchy 3].[Member 3].&[Value 3] 
          ,[Dim 2].[Member 2].[Member 1]
       )} on rows
from [Cube 1]
where
(
    {
       [Dim 4].[Hierarchy 4].[Member 4].&[Value 2]
       ,[Dim 4].[Hierarchy 4].[Member 4].&[Value 4]
       ,[Dim 4].[Hierarchy 4].[Member 4].&[Value 8]
    }
    ,([Measures].[Measure 1])
)

答案 1 :(得分:2)

你的tuple形成得很糟糕;你可以尝试交叉连接(你需要一套):

where
 { [Dim 4].[Hierarchy 4].[Member 4].&[Value 2], [Dim 4].[Hierarchy 4].[Member 4].&[Value 4], [Dim 4].[Hierarchy 4].[Member 4].&[Value 8] }  
 * {( [Dim 3].[Hierarchy 3].[Member 3].&[Value 3], [Measures].[Measure 1] )}

或者您可以使用sub-query代替(我最喜欢的选择)。