Sql server 2008 r2 按层次结构的多个成员筛选

Sql server 2008 r2 按层次结构的多个成员筛选,sql-server-2008-r2,ssas,mdx,dimensions,olap-cube,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] )} 但是现在我还

假设我有一个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]所做的那样,但是对于来自不同维度n的层次结构的多个成员值,让我们调用它们:

[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.
我也试过这个(我知道,在这里没什么意义):

得到这个:

The : function expects a member expression for the 2 argument. A tuple set expression was used.
我对MDX(在T-SQL方面更有经验)相当陌生,甚至不知道谷歌到底是怎么回事,所以我的沉默让我感到赤裸裸

欢迎任何帮助

提前感谢。

您的表格格式不正确;您可以尝试交叉连接(您需要一组):

或者你可以用a代替(我最喜欢的选择)。

明白了:

如果要使用同一层次结构中的多个成员,则需要 在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])
)

你期望的结果是什么?您遇到的基本问题是MDX中的WHERE子句与SQL不同——它是一个“切片器”而不是一个过滤器,允许您选择单元格值的定义。有了一些关于你期望的信息,向你展示一个适合你的例子会更容易。为findango的兴趣干杯。我希望能像我在
[Dim 3].[Hierarchy 3].[Member 3].[Value 3].
中所做的那样,对另一个维度的另一个层次的多个值进行切片:
[Dim 4].[Hierarchy 4].[Member 4].[Value 2]
<代码>和[值4]<代码>.&[Value 8]谢谢您的建议@Marc Polizzi。但在这个解决方案中,我得到了同样的错误,只是这一次:“Hierarchy 4”层次结构在Crossjoin函数中使用了不止一次。我应该提到我使用的是SQLServer2008R2。子查询解决方案对我来说是全新的,你能用我的例子演示一下吗?对不起,错过了层次结构3。。。修正了我的回答
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] )}
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])
)