全部文档
文档中心财务模型多维表达式MDXMDX函数执行函数CalcFormula函数

CalcFormula函数

触发成员公式的计算

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;
本页目录

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send