Mdx 在过滤条件中使用集合

Mdx 在过滤条件中使用集合,mdx,iccube,Mdx,Iccube,我正在icCube的demo Sales cube上尝试以下查询: WITH SET [Amer.Countries] AS Descendants([North America],[Country]) SELECT Filter([Amer.Countries],([Measures].[Amount], {[2009], [2010]}) > 13240) on Rows, [Measures].members on Columns FRO

我正在icCube的demo Sales cube上尝试以下查询:

WITH 
    SET [Amer.Countries] 
        AS Descendants([North America],[Country])
SELECT 
    Filter([Amer.Countries],([Measures].[Amount], {[2009], [2010]}) > 13240) on Rows,
    [Measures].members on Columns
FROM [Sales]
WHERE [Time].[2011]
条件[Measures].[Amount],{[2009],[2010]}>13240有什么问题,我该如何修复它

我从icCube收到以下错误消息:

运算符'>'语法错误左操作数:'set' 右操作数:'numeric'

我从这条消息中了解到的唯一一件事是,集合{[2009]、[2010]}的使用不合适。然而,我不明白为什么会这样,解决办法应该是什么。          

13240的左侧需要一个数值或至少一个可以计算为数值的表达式。您编写的不是元组,可以看作是交叉连接。要计算当前国家2009年和2010年的合计[金额]:

([Measures].[Amount], {[2009], [2010]})
您可以使用函数计算过滤值:

eval( {[2009], [2010]}, [Measures].[Amount] )
并在SELECT中使用它来计算忽略切片器中指定的[2011]年的:

with 
    static set [Amer.Countries] as 
       filter( [North America].children , 
               eval( {[2009], [2010]}, [Measures].[Amount]) >= 13240
       )  

select [Measures].members on 0, [Amer.Countries] on 1
from [Sales] where [Time].[2011]
为了更好地理解元组、集合等的概念,您可以查看一下MDX的以下内容


希望这会有所帮助。

此查询生成一个空结果集,这是没有意义的,因为在北美有一些国家,2009年和2010年的销售额总计超过13240。看起来2011年的切片是在计算[FilterValue]之前应用的,这不是我想要的…我已经编辑了我的响应以使用静态集而不是计算成员。这样,在计算国家集时,切片器将被忽略。
with 
    static set [Amer.Countries] as 
       filter( [North America].children , 
               eval( {[2009], [2010]}, [Measures].[Amount]) >= 13240
       )  

select [Measures].members on 0, [Amer.Countries] on 1
from [Sales] where [Time].[2011]