在MDX查询中使用NOT IN

在MDX查询中使用NOT IN,mdx,mondrian,Mdx,Mondrian,我试图在MDX select查询中从维度中筛选出一些点。我使用了中记录的过滤器(,)函数。正在运行的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].

我试图在MDX select查询中从维度中筛选出一些点。我使用了中记录的过滤器(,)函数。正在运行的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。你们能指出我的语法有什么问题吗。我也试过了,除了(,)

最好的, 罗汉

更新:

谢谢马克,为我指明了正确的方向。我又测试了一些,发现Members函数还返回一个点'All',其中包括维度上的所有点。因此,即使Filter()或Except()函数正确地过滤了点,“All”点仍然包含所有点的值,因此在Measure.AMOUNT计算中包含了它们。相反,我使用了Children函数,它不会返回“All”点,因此我看到了期望的结果。更新了MDX的下面

使用过滤器和NOT IN运行MDX(警告:NOT IN是Mondrian特定的操作)

使用except工作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]

谢谢

我将使用以下函数代替过滤器:

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

我正在构建一个定制的MDX构建器,我已经进入了1..n过滤器构造工作的阶段。我尝试在其周围添加Exception,并启动了查询,但Exception被忽略


我试着,看看我的链接/答案,它工作得很好(也意味着它可以链接在一起(适用于许多我想忽略/过滤的值)。

我确实试过,就像我提到的,但这也没什么帮助。除了({[DIM1].[A],[DIM1].[B],[DIM1].[C]},{[DIM1].[A]})怎么样有效吗?有效!有效。我引用所有成员的方式有问题{[DIM1].members}然后设置?非常感谢Marc,谢谢你的帮助。好吧!我知道问题出在哪里了。Members函数返回给定维度的所有成员,除了计算的,但包括“all”成员。因此,即使我的筛选集没有我排除的点,“all”成员在计算的度量值中包括了它们的值。我改为使用了Children函数,现在可以很好地使用filter()和except()
Except ([DIM1].MEMBERS, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )