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