我试图从我的 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 为我指明了正确的方向。我测试了更多,发现成员函数还返回一个点“全部”,其中包括我的维度上的所有点。因此,即使 Filter() 或 except() 函数正确过滤了点,“全部”点仍包含所有点的值,因此将它们包括在 Measure.AMOUNT 计算中。我改为使用 Children 函数,但它不会返回“全部”点,因此我看到了所需的结果。更新了下面的 MDX

使用过滤器和 NOT IN 工作 MDX(警告:NOT IN 是蒙德里安特定的操作)
 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]

谢谢 !

最佳答案

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

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

关于mdx - 在 MDX 查询中使用 NOT IN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15981323/

10-13 09:04