在过滤条件中使用一个集合

时间:2017-10-22 15:04:03

标签: mdx iccube

我在icCube的演示销售多维数据集上尝试以下查询:

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')   (右操作数: '数字')

我从这条消息中唯一理解的是,使用集合{[2009], [2010]}是不合适的。但是,我不明白为什么会这样,应该修复什么。

1 个答案:

答案 0 :(得分:1)

([Measures].[Amount], {[2009], [2010]}) > 13240

13240的左侧需要一个数值或至少一个可以计算为值的表达式。你写的不是一个元组,可以被认为是一个交叉连接。计算2009年的汇总[金额]& 2010年的当前国家:

([Measures].[Amount], {[2009], [2010]})

您可以使用eval函数计算过滤值:

eval( {[2009], [2010]}, [Measures].[Amount] )

在SELECT中使用它来计算忽略切片器中指定年份[2011]的static set

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]

您可以查看以下introduction MDX,以便更好地理解元组,集合等的概念......

希望有所帮助。