2

我有一个要 AGGREGATE 的元组集。

例如:我有这个查询:

Select {[Sales Territory].[Sales Territory].DEFAULTMEMBER.children} on 0,
{[Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children} on 1 
From [Adventure Works]

当我想为其中一个轴添加TOTAL时,我会这样做:

WITH MEMBER [Sales Territory].[Sales Territory].[Total X] as 'AGGREGATE(AXIS(0))' 
Select {[Sales Territory].[Sales Territory].[Total X],[Sales Territory].[Sales Territory].DEFAULTMEMBER.children} on 0
,{[Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children} on 1 From [Adventure Works]

现在,现在一切都很好。但是当我试图聚合一个交叉连接集时它失败了。请以这个查询为例:

Select {[Sales Territory].[Sales Territory].DEFAULTMEMBER.children} on 0
,{[Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children}*{[Sales Channel].[Sales Channel].DEFAULTMEMBER.children} on 1 
From [Adventure Works]

请注意,我在 [Sales Reason].[Sales Reason Type] 到 [Sales Channel].[Sales Channel] 之间进行了交叉连接

当有多个成员时,有没有办法在轴上进行总计?

谢谢!

PS:我是 MDX 查询的新手

4

1 回答 1

0

你做的事情比必要的复杂。您的第二个查询应简化为:

Select [Sales Territory].[Sales Territory].Members on 0,
       [Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children on 1
  From [Adventure Works]

请注意,该All成员已经是(几乎)MDX 中所有层次结构的成员。因此,要包含All第三个查询的成员,您可以编写

Select {[Sales Territory].[Sales Territory].Members}
       on 0,
       {[Sales Reason].[Sales Reason Type].Members}
       *
       {[Sales Channel].[Sales Channel].Members}
       on 1 
  From [Adventure Works]

或者,如果您真的只想获得轴的总计,而没有来自一个层次结构的总计与另一个层次结构的其他成员的组合,则合并两个集合 - 一个包含包含所有成员的元组,一个与其他两个层次结构的交叉连接。我使用Union这里的简写形式——它是+集合的运算符:

Select {[Sales Territory].[Sales Territory].Members}
       on 0,
       { ([Sales Reason].[Sales Reason Type].All, [Sales Channel].[Sales Channel].All) }
       +
       (
          {[Sales Reason].[Sales Reason Type].[Sales Reason Type].Members}
          *
          {[Sales Channel].[Sales Channel].[Sales Reason Type].Members}
       )
       on 1 
  From [Adventure Works]
于 2013-09-03T17:01:29.497 回答