如何使用MDX在交叉连接集上进行聚合

时间:2013-09-01 06:31:38

标签: aggregate mdx cross-join

我有一个我想要聚集的元组。

例如: 我有这个问题:

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]

请注意我在[销售原因]。[销售原因类型]到[销售渠道]之间进行了交叉连接。[销售渠道]

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

谢谢!

P.S:我是MDX查询的新手

1 个答案:

答案 0 :(得分: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]