如何在第三级应用过滤器后获得第一级数据成员(Mondrian MDX)

时间:2011-08-03 12:17:42

标签: mdx mondrian

我有一个名为PERIOD的维度,其中包含三个级别YEARQUARTERMONTH

我已经过滤掉了第三级数据,如下所示:

With SET [*BASE_MEMBERS_Period.Period] AS ' Filter ( [Period.Period].[Month].Members , (NOT( [Period.Period].CurrentMember In { [Period].[All Periods].[FY 2008-2009].[Q4 2008-09].[Mar 2009 ] } ) ) ) ' 

这意味着,我们需要除[Mar 2009 ]以外的所有数据。

现在,我必须针对以下要求编写查询:

  1. 通过应用上面的过滤器获取YEAR级别所有成员的数据。         这意味着......成员[FY 2008-2009]的价值应该在排除[Mar 2009]的价值之后出现。

  2. 通过应用上面的过滤器来获取QUARTER级别的所有成员的数据。         这意味着......成员[Q4 2008-09]的价值应该在排除[Mar 2009]的价值之后出现。

  3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

不确定Mondrian,但如果它符合MDX:

首先,您可以使用 - 运算符编写您的集合:

With SET [*BASE_MEMBERS_Period.Period] AS '[Period.Period].[Month].Members - [Period].[All Periods].[Mar 2009 ]'

为了获得您正在寻找的行为,您可以使用subselect

Select
 [Period.Period].[Year] on 0
From
  (Select 
    [Period.Period].[Month].Members - [Period].[All Periods].[Mar 2009 ] on 0 
    from [MyCube] )

从结果中可以看出,2009年3月的数据已被删除。 Subselect不仅适用于事实数据(请参阅VISUAL标志),还适用于mdx函数。您可以从成员函数中检查以下语句,其中过滤月份:

Select
 [Period.Period].[Month].members on 0 // -> March 2009 is not there
From
  (Select 
    [Period.Period].[Month].Members - [Period].[All Periods].[Mar 2009 ] on 0 
    from [MyCube] )