我正在尝试从我的 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]
谢谢 !