触发成员公式的计算
CalcFormula(Member_Expression[,...n])
CalcFormula(Set_Expression)
Member_Expression_ -> 数据类型:Member_ 维度成员。在CalcFormula中,仅允许包含科目类型的维度的成员。 Set_Expression_ -> 数据类型:{Member}_ 成员集合。在CalcFormula中,仅允许包含科目类型的维度的成员集合。
返回值数据类型: 无返回值
触发对应的科目成员上的成员公式的计算。如果配合Scope使用,则Scope中的范围作为成员公式计算范围的二次限定。
成员公式可以通过MDX计算脚本中的CalcFormula函数触发,如在科目成员[Account].[Total_Sales]上设定了如下成员公式:
Scope(MemberSet([Scenario].[#root]),MemberSet([Version].[#root]),MemberSet([Year].[#root]),MemberSet([Period].[#root]),MemberSet([Entity].[A]),[Account].[Total_Sales]);
This = [Account].[Volume]*[Account].[Price];
End Scope;
计算脚本中:
Use Cube_test;
CalcFormula([Account].[Total_Sales]);
表示触发[Account].[Total_Sales]成员的成员公式,并在所有满足条件的单元格上进行计算。在该语句中,因为没有二次限定计算范围,因此会使用成员公式中的Scope范围进行计算。
如果需要计算时做二次限定,脚本如下:
Use Cube_test;
Scope([Scenario].[Actual],[Version].[Version1],MemberSet([Year].[#root]), MemberSet([Period].[#root]),MemberSet([Entity].[#root]));
CalcFormula([Account].[Total_Sales]);
End Scope;
如上例所示,在CalcFormul函数外添加了Scope用于范围的限制,表示仅仅在限制的范围内对成员公式进行触发。因此,最终计算的范围是取CalcFormula所限定的范围和成员公式本身所限制的范围的交集。 在该示例中,计算脚本中的Scenario和Version成员做了更严格的限定(限定在[Scenario].[Actual]和[Version].[Version1]上),而Entity维度上则放宽到了所有Entity成员(emberSet([Entity].[#root])),则取交集后,这三个维度上最终的计算范围为:[Scenario].[Actual], [Version].[Version1], MemberSet([Entity].[A])。其他维度由于计算脚本和成员公式的设定一样,因此,最终实际执行的计算为:
Use Cube_test;
Scope([Scenario].[Actual], [Version].[Version1], MemberSet([Year].[#root]), MemberSet([Period].[#root]),MemberSet([Entity].[A]),[Account].[Total_Sales]);
This = [Account].[Volume]*[Account].[Price];
End Scope;
CalcForm可以连续触发多个成员的计算。
Use Cube_test;
Scope([Scenario].[Actual],[Version].[Version1],MemberSet([Year].[#root]), MemberSet([Period].[#root]),MemberSet([Entity].[#root]),);
CalcFormula([Account].[Total_Sales]);
CalcFormula([Account].[Avg_Price]);
End Scope;
CalcForm也可以使用集合类型的函数作为参数。如下例的脚本表示在Scope范围内,触发Total_BS科目下的所有成员的成员公式。
Use Cube_test;
Scope([Scenario].[Actual],[Version].[Version1],MemberSet([Year].[#root]), MemberSet([Period].[#root]),MemberSet([Entity].[#root]),);
CalcFormula(Memberset([Account].[Total_BS]));
End Scope;
回到顶部
咨询热线