MDX:如何聚合具有相同名称的层次结构级别成员

时间:2010-03-16 22:21:39

标签: mdx

问候,

我是MDX的新手,并且无法理解如何使用具有相同名称的成员在层次结构级别上执行聚合。此查询特定于Microsoft Analysis Services 2000多维数据集。

我有一个给定的层次结构维度,其级别定义如下:

[Segment].[Flow].[Segment Week]

[Segment Week]级别内,我有以下成员:

[Week- 1]
[Week- 2]
[Week- 3]
   ...
[Week- 1]
[Week- 2]
[Week- 3]

成员具有相同的名称,但在父级别与不同的[Flow]对齐。因此,[Week- 1]成员的第一次出现与[Flow].[A]对齐,而[Week- 1]的第二次出现与[Flow].[B]对齐。我要做的是聚合[Segment Week]级别中具有相同名称的所有成员。在SQL术语中,我想在[Segment Week]级别中使用GROUP BY成员名称。我不确定该怎么做。谢谢。

戴夫

2 个答案:

答案 0 :(得分:0)

我认为您的立方体设计存在缺陷。

设计维度的最佳方法是使其所有成员都是唯一的,并且聚合路径遵循维度的自然层次结构。

您可以从SEGMENT中删除WEEK级别并创建另一个维度(如果我没记错的话,您在AS 2000中不能有多个层次结构),比如WEEK,具有以下结构:

[Week].[Week- 1]
[Week].[Week- 2]
[Week].[Week- 3]
etc

然后你只需按SEGMENT和Week过滤。 例如,要获得Flow A的所有Week1:

SELECT {[Measures].members} on 0 
FROM MYCUBE
WHERE ([Week].[Week- 1],[Segment].[A])

答案 1 :(得分:0)

你能使用会员的密钥吗?

[Week].&[1] ([Week].[Week - 1] (flow1)) 
[Week].&[5] ([Week].[Week - 1] (flow2))

作为参考,在2008年的Adventure Works DW Standard Ed'Cube中,客户Aaron A. Allen的关键是[客户]。[客户]。& [20075]

更新: 对不起,只是重新阅读你的问题,看起来你并没有试图让特定的一周流向一个流程,你想要聚集它们。那样的CASE声明怎么样:

CASE
  WHEN [Week].CURRENTMEMBER.NAME='Week - 1'
  THEN [Week].CURRENTMEMBER
  ELSE 0
END

不是非常通用或灵活,但它可能是一个开始......