在MDX查询中使用NOT IN

时间:2013-04-12 21:42:33

标签: mdx mondrian

我正在尝试从MDX选择查询中的维度中过滤掉一些点。我使用了http://mondrian.pentaho.com/documentation/mdx.php中记录的Filter(,)函数。正在运行的MDX如下

  SELECT {[Measures].[AMOUNT]} on 0,  
         {Filter ([DIM1].MEMBERS, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
         {[DIM2].[S]} on 2, 
         {[DIM3].[EFO]} on 3, 
         {[CURRENCY].[EUR]} on 4
  from [CUBE]

但Measures.AMOUNT仍在考虑Dim1.A,Dim1.B和Dim1.C。请问亲切的人请指出我的语法有什么问题。我也尝试了Except(,)。

最佳, 罗汉

更新:

感谢Marc,指出我正确的方向。我测试了一些,发现会员功能也返回了一个点' All'其中包括我维度上的所有要点。因此,即使Filter()或Except()函数正确地过滤了点,所以' All' point仍包含所有点的值,因此将它们包含在Measure.AMOUNT计算中。我改为使用了儿童功能,并没有返回全部'点,所以我看到了理想的结果。更新了下面的MDX

使用Filter和NOT IN工作MDX(警告:NOT IN是Mondrian特定操作)

 SELECT {[Measures].[AMOUNT]} on 0,  
         {Filter ([DIM1].Children, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
         {[DIM2].[S]} on 2, 
         {[DIM3].[EFO]} on 3, 
         {[CURRENCY].[EUR]} on 4
  from [CUBE]

使用除

之外的MDX
 SELECT {[Measures].[AMOUNT]} on 0,  
         {except ( {[DIM1].Children}, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )} on 1,
         {[DIM2].[S]} on 2, 
         {[DIM3].[EFO]} on 3, 
         {[CURRENCY].[EUR]} on 4
  from [CUBE]

谢谢!

2 个答案:

答案 0 :(得分:4)

我将使用Except函数代替过滤器,如下所示:

Except ([DIM1].MEMBERS, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )

答案 1 :(得分:0)

我正在构建一个自定义MDX构建器,并且我已经进入1..n FILTER构造工作的阶段。我尝试在其周围添加EXCEPT,并触发了查询,但EXCEPT被忽略了。

MDX query works but ignores the EXCEPT clause

我尝试了<>,看到了我的链接/答案,并且效果很好(也意味着它可以链接在一起(适用于许多我想忽略/过滤的值)。