在过滤条件中使用集合

Using a set in the filter condition

我正在对 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 收到以下错误消息:

operator '>' syntax error (left-operand:'set') (right-operand:'numeric')

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

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

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

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

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

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

并在 SELECT 中使用它来计算 static set 忽略切片器中指定的年份 [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]

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

希望对您有所帮助。