在计算成员中使用EXCEPT

时间:2010-09-10 14:27:18

标签: mdx ssas

我在MDX查询中有以下计算成员:

MEMBER [Asset].[Class].[Fixed Income Derivatives (Inflation Linked)]
AS
(
    [Asset].[Class].&[Fixed Income],
    [Asset].[Sub Class].&[Derivatives],
    [Asset].[Sub Class Type].&[Inflation]
)

这在查询中使用如下:

SELECT
{
  [Measures].[Market Value]
} ON 0,
NON EMPTY(
{ 
    [Asset].[Class].[Fixed Income Derivatives (Inflation Linked)]
} ON 1
FROM [Asset]

这很好用,当然也给了我所有与通胀挂钩的固定收益衍生品的市场价值。

我现在尝试添加第二个计算成员,这次是为了给我所有固定收益衍生品,它们 NOT 与通胀挂钩。我觉得这就像第二个成员中的EXCEPT一样容易:

MEMBER [Asset].[Class].[Fixed Income Derivatives (Non Inflation Linked)]
AS
(
    [Asset].[Class].&[Fixed Income],
    [Asset].[Sub Class].&[Derivatives], 
    EXCEPT(
       [Asset].[Sub Class Type].[Sub Class Type], 
       [Asset].[Sub Class Type].&[Inflation]
    )
)

唉,没有运气 - 它会产生错误

  

该函数需要一个字符串或数字表达式   论点。一个元组集表达式   使用

这是一个令人困惑的消息,但在SSAS课程中是相同的。我确定我在正确的轨道上,只是略有错误,但我不能在我的生活中发现问题。

1 个答案:

答案 0 :(得分:4)

您只需使用聚合函数即可实现目标,而不会出现错误。

更改您的计算成员定义,如下所示;

MEMBER [Asset].[Class].[Fixed Income Derivatives (Non Inflation Linked)]
AS
(
    Aggregate
    (
       {[Asset].[Class].&[Fixed Income]} * 
       {[Asset].[Sub Class].&[Derivatives]} * 
       EXCEPT
       (
        [Asset].[Sub Class Type].[Sub Class Type], 
        [Asset].[Sub Class Type].&[Inflation]
       )
       ,Measures.CurrentMember
    )
)