我对SSAS很陌生,我对如何解决这个问题感到非常难过。我有一个名为Thresholds的维度。在阈值维度内,有以下成员:
[门槛年份],[门槛1金额],[门槛2金额],[门槛3金额]
我还有一项措施称为[合格委员会],[第1级金额],[第2级金额],[第3级金额]
除此之外,还有一个名为[Statement Dates]
的时间维度所以基本上这就是我想做的事情。我想创建一个计算成员,当最终用户从[Statement Dates]中选择一个时间范围时,我想总结一下[Qualifying Commission]并将其与相应年份的阈值金额进行核对。如果它大于[Threshold1 Amount],我希望它返回[Tier1 Amount]度量,并使用相同的逻辑应用于阈值2和3。
有人可以给我一个关于我需要做什么的路线图吗?如果我需要重构底层数据库中的数据以使其工作,那么知道这将非常有用。在此先感谢您的帮助。
答案 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)
您还应该考虑使用范围运算符。当您需要实现条件求和时,它可以帮助提高性能。