写入科目节点/集
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 函数那样每次调用时都处理。