我试图从我的 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/