Sql server 2008 r2 按层次结构的多个成员筛选
假设我有一个MDX查询: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] )} 但是现在我还
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])
)