跳转至

写入科目节点/集

TGKML 语法允许不仅将脚本结果写入单个科目,还可以写入科目节点或一组节点。

写入节点

系统将相同结果写入与指定节点相关的所有科目。使用的语法如下:

[LO].[account hierarchy code|node code] := ...;

例如,我们可以写 [LO].[GG|03] 来表示将结果写入与层次结构 GG 的节点 03 相关的所有科目。

在此类赋值中,可以将相同的输出科目指定为输入科目(通常从多维数据集的另一部分读取)。语法如下:

[LO].[GG|03] := [ ](Time.ParallelPeriod(Time.Scenario.Prev));

请注意,方括号之间有一个空格。

可以将这些操作数与普通操作数(单个输入科目)组合使用。在这种情况下,从单个输入科目读取的金额将与所有输出科目组合。例如:

[LO].[GG|03] := [20132] * [ ](Time.ParallelPeriod(Time.Scenario.Prev));

写入一组科目

可以定义一组科目(更多详细信息请参见 SET 表达式),然后仅将结果写入它们。

例如,我们可以定义以下科目集:

Account.@tmp := ([account_1] + [account_2] + [account_3]);

在脚本语法中使用如下:

[LO].@tmp :=...;

MULTI 函数

可以使用 Multi 函数获得与前面类似的结果:

[LO].Multi([account_1] + [account_2] + [account_3] +..., Dimension.Filter([]), Dest#.[...],...,...) := ...;

例如,我们可能有

[LO].Multi([X00000] + [C00000], Dest1[D11], Entity.Filter([01|$])) := [D00000] *[P00000];

在这种情况下,乘积的结果将写入属于 Multi 语法所定义集合的每个科目。

Multi 语法也可用于脚本的输入部分。在这种情况下,系统计算属于 Multi 语法所定义集合的科目之和。

示例:

[LO].@TMP1 := Multi([C00000] + [D00000] + [H00000], Per, Dest1[D11]);

[LO].@TMP2 := Multi([E00000] + [F00000], Per);

[LO].[X00000] := Bound(@TMP2, "P", @TMP1 - @TMP2);

尽管 Multi 函数和 Set 函数彼此相似,但前者更高效,因为系统仅处理一次,而不像 Set 函数那样每次调用时都处理。