3

我正在尝试从我的 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() 函数正确过滤了这些点,“All”点仍然包含所有点的值,因此将它们包含在 Measure.AMOUNT 计算中。我改为使用 Children 函数,它不返回“All”点,所以我看到了想要的结果。更新了下面的 MDX

使用过滤器和 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]

谢谢 !

4

2 回答 2

5

而不是过滤器,我会使用以下的except函数:

Except ([DIM1].MEMBERS, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )
于 2013-04-13T05:50:27.227 回答
0

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

MDX 查询有效,但忽略 EXCEPT 子句

我尝试 <> 来查看我的链接/答案,它运行良好(也意味着它可以链接在一起(适用于我想要忽略/过滤的许多值)。

于 2019-11-22T15:20:29.783 回答