跳转至

LoopOnTime

通常,当 TGKML 脚本同时在多个场景/期间上运行时,系统计算数据然后一次性将它们全部存储到数据库,而不是每次一个场景/期间。

如果用户需要在同一脚本中将同一科目同时作为输出和输入进行管理,例如使用每个月上个月的数据来为多个月份计算数据,并编写以下类型的赋值:

[LO].[X00000] := [X00000](Time.Prev)

此赋值不会给出任何结果。

实际上,在这些情况下需要使用特定语法:LoopOnTime,然后写

[LO].[X00000](LoopOnTime) := [X00000](Time.Prev)

当使用 LoonOnTime 时,从技术上讲,系统每次计算和写入一个场景/期间的数据。

当要计算的科目不止一个且它们相互引用,因此需要运行一组赋值 n 次(每个筛选器中指定的场景/期间一次)时,需要使用 LoopOnTime 语法并写

<< "LoopOnTimeOn";

赋值 1

赋值 2

赋值 3

<< "LoopOnTimeOff";

这样,系统在第一个场景/期间上运行赋值 1,然后在第一个场景/期间上运行赋值 2,然后在第一个场景/期间上运行赋值 3,然后在场景/期间 2 上运行相同的赋值,依此类推。

仅在确实必要时才应使用 LoopOnTimeOn 语法,因为它可能会延迟脚本运行时间。

LoopOnTime(Scenario)

如果用户需要在同一脚本中将同一科目同时作为输出和输入使用,例如使用上一场景(而非上一场景/期间)的数据来构建数据,则可以使用语法 LoopOnTime(Scenario),然后写,例如

[LO].[X00000](LoopOnTime(Scenario)) := [X00000](Time.Prev)

从技术上讲,使用语法 LoopOnTime(Scenario) 时,系统逐个场景计算和写入数据。

当要构建的科目不止一个且它们相互关联,因此需要运行一组赋值 n 次(每个筛选器中指定的场景一次)时,要使用的语法是 LoopOnTimeOn(Scenario),然后写

<< "LoopOnTimeOn(Scenario)";

赋值 1

赋值 2

赋值 3

<< "LoopOnTimeOff";

这样,系统在第一个场景上运行赋值 1,然后在第一个场景上运行赋值 2,然后在第一个场景上运行赋值 3,然后在场景 2 上运行相同的赋值,依此类推。