根据一个客户的要求,我发现了一种新的和创新的方法,在SAC中使用计算的措施进行差异分析。这是由于SAP在今年早些时候发布的新模型才得以实现。基于新模型的新功能,本博客中的计算变得非常容易。
一个客户希望在损益表(P&L)中进行盈利差异分析(EVA)计算,包括数量/混合和比率。该要求是在某些叶子成员(账户类型)中进行数量/混合计算,在这些叶子成员和一些额外的成员中进行比率计算。
EVA的计算通常着眼于实际数据和AOP数据之间的差异,所以我们首先创建了一个基于账户类型的差异测量。我们把这个措施命名为 "实际_Vs_AOP"。下面是计算过程。
IF([d/ACCOUNT_TEST].[p/Account_Type]="INC" ,RESULTLOOKUP([Amount] ,[d/Version]="public.Actual" )-RESULTLOOKUP([Amount] ,[d/Version]="public.AOP" ) ,(IF([d/ACCOUNT_TEST].[p/Account_Type]="EXP" ,RESULTLOOKUP([Amount] ,[d/Version]="public.Actual" )-RESULTLOOKUP([Amount] ,[d/Version]="public.AOP" ) ,0 )) )
体积混合计算采取每磅美元/体积。因此,接下来需要为每个成员计算每磅的美元。这个计算是直接的。
[Amount] /RESULTLOOKUP([Amount] ,[d/ACCOUNT_TEST]="Volume (lbs)" )
然后我们可以创建体积/混合计算。这个计算比较复杂,因为它只对某些叶子成员进行计算。我们通过在账户维度中创建一个属性,并将我们想要计算体积/混合的各种账户标记为 "EVA "来实现这一目的。另外,如果交易量为空,我们希望整个实际交易量与AOP出现在这一列。 这就是我们使用的计算方法。
IF([d/ACCOUNT_TEST].[p/EVA_Calc]="EVA", IF(ISNULL(RESULTLOOKUP([Amount] ,[d/ACCOUNT_TEST]="Volume (lbs)" )) ,[Actual_VS_AOP],IF(RESULTLOOKUP([Amount] ,[d/ACCOUNT_TEST]="Volume (lbs)" )=0 , [Actual_VS_AOP],RESULTLOOKUP([Dollar_Per_Pound] ,[d/Version]="public.AOP" )*RESULTLOOKUP([Actual_VS_AOP] ,[d/ACCOUNT_TEST]="Volume (lbs)" ))))
最后,我们需要创建'率'的计算措施,我们像上面的计算一样完成了。我们在账户维度中创建的属性中,用 "费率 "标记了需要计算费率的其他账户。然后,我们就可以计算 "EVA "账户和 "费率 "账户的费率了。注意:对于被标记为费率的账户,我们只想让这些账户返回实际与AOP。这些是固定支出账户,所以它们的计算方法不一样。这就是计算结果。
IF([d/ACCOUNT_TEST].[p/EVA_Calc]="EVA" ,(RESULTLOOKUP([Dollar_Per_Pound] ,[d/Version]="public.Actual" )-RESULTLOOKUP([Dollar_Per_Pound] ,[d/Version]="public.AOP" ))*RESULTLOOKUP([Amount] ,[d/ACCOUNT_TEST]="Volume (lbs)" ),IF([d/ACCOUNT_TEST].[p/EVA_Calc]="Rate" ,[Actual_VS_AOP]-[Vol_Mix] ) )
客户的最后一个要求是通过我们在账户维度中创建的层级来汇总这些总数,而不在父节点级别上进行计算。我们能够通过利用SAC中的例外汇总功能来实现这一目的。我们使用sum作为 "例外聚合类型"。详细情况见下文。

我希望你们都喜欢这篇博文,它能帮助你们在未来解决问题。如果你发现有什么好处,请给它一个赞!如果你有任何问题,请留下评论。