立方体计算成员问题

时间:2009-08-17 20:15:37

标签: ssas mdx cube dimension

我对SSAS很陌生,我对如何解决这个问题感到非常难过。我有一个名为Thresholds的维度。在阈值维度内,有以下成员:

[门槛年份],[门槛1金额],[门槛2金额],[门槛3金额]

我还有一项措施称为[合格委员会],[第1级金额],[第2级金额],[第3级金额]

除此之外,还有一个名为[Statement Dates]

的时间维度

所以基本上这就是我想做的事情。我想创建一个计算成员,当最终用户从[Statement Dates]中选择一个时间范围时,我想总结一下[Qualifying Commission]并将其与相应年份的阈值金额进行核对。如果它大于[Threshold1 Amount],我希望它返回[Tier1 Amount]度量,并使用相同的逻辑应用于阈值2和3。

有人可以给我一个关于我需要做什么的路线图吗?如果我需要重构底层数据库中的数据以使其工作,那么知道这将非常有用。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

好吧,我们假设[Qualifying Commission]是一个附加度量,这意味着SSAS会为我们处理总和。

基本上,我们只需找到我们在[Statement Dates]下的任何年份来获取我们的门槛。

所以,让我们把它分成几个块。我们要做的第一件事就是找到我们的权利[Threshold Year]

create set [Current Threshold] as
    iif([Statement Dates].[YQM].CurrentMember IS [All]
        ,[Threshold Year].[All]
        ,StrToSet("[Threshold Year].[" + 
            Ancestor([Statement Dates].[YQM].CurrentMember
            , [Statement Dates].[YQM].[Year]).Name +  
        "]"))

接下来,我们将应用此阈值来获取正确的数字:

create member currentcube.[Measures].[Threshold Amount] as
    case
        when [Qualifying Commission] > 
                 [Current Threshold].Item(0).Properties("Threshold1 Amount") then
            [Measures].[Tier1 Amount]
        when [Qualifying Commission] > 
                 [Current Threshold].Item(0).Properties("Threshold2 Amount") then
            [Measures].[Tier2 Amount]
        when [Qualifying Commission] > 
                 [Current Threshold].Item(0).Properties("Threshold3 Amount") then
            [Measures].[Tier3 Amount]
        else 0
    end

瞧,你正在用煤气做饭。

答案 1 :(得分:0)

您还应该考虑使用范围运算符。当您需要实现条件求和时,它可以帮助提高性能。

Scope operator From MSDN