SET 表达式

为了简化给定维度元素集的定义,并允许在 TGKML 脚本中多次重用此集合而无需每次都从头定义该集合,可以使用 SET 表达式,即定义给定维度元素集的某种“别名”。一旦定义了元素集,SET 表达式就允许在脚本中使用运算符“@”多次调用它。

要使用的语法如下:

.@ := {elements list}

例如,可以编写

  • Dest1.@MY_SET_1 := [D11] + [D12] + [GEN];

在这种情况下,定义的集合是 MY_SET_1,它由自定义维度 1 的 D11、D12 和 GEN 元素组成;

  • Entity.@MY_SET_2 := [01|$];

在这种情况下,定义的集合是 MY_SET_2,它由与实体层次 01 的节点 $ 相关的所有实体组成;

  • Dest2.@MY_SET_3 := All;

在这种情况下,定义的集合是 MY_SET_3,它由自定义维度 2 表的所有元素组成。

对于科目维度,可以通过引用 FST 项来定义元素集。要使用的语法为:{,} 。只能使用仅依赖于“科目”维度的财务报表模板的 Parent 项。

例如,可以编写

  • Account.@MY_SET_3 := ([C00000] + {S01,V0001});

在本例中,所定义的集合为 MY_SET_3,它由科目 C00000 以及财务报表模板 S01 中与 FST 项目 V0001 相关的所有科目组成;

  • [LO].@MY_SET_4:= Multi([X00000] + {S01,V0001} + {S02,V0003});

在本例中,所定义的集合为 MY_SET_4,它由科目 X00000、财务报表模板 S01 中与 FST 项目 V0001 相关的所有科目,以及 FST S02 中与 FST 项目 V0003 相关的所有科目组成;

定义元素列表时,可以使用以下代数运算符:

  • +. 元素并集。例如,写入 Entity.@MY_SET_4 := @MY_SET_2 + [A01]; 表示定义一个实体集合,由集合 MY_SET_2 中的实体加上 A01 实体组成。
  • -. 从列表中排除某些元素;
  • *. 元素交集

定义元素集合后,通过使用 SET 表达式,可以使用以下语法调用它

@<分配给该集合的名称>

SET 表达式还可用于

  • 在定点读取中

Dest1.@MY_SET_1 := [D11] + [D12] + [GEN]; //定义

... := [C00000](Dest1. @MY_SET_1);

以指定科目 C00000 的值仅从自定义维度 1 的元素 D11、D12 和 GEN 中读取;

  • 在覆盖值定义中。

Dest1.@MY_SET_1 := [D11] + [D12] + [GEN]; //定义

[C00000](Dest1.@MY_SET_1) :=...;

以指定脚本的结果写入科目 X00000 以及自定义维度 1 的元素 D11、D12 和 GEN;

  • 在筛选器定义中。
  • 在仅针对某些确定元素存在的临时科目定义中(即属于由 SET 表达式定义的集合的那些元素)

Dest1.@MY_SET_5(@TEMP_ACCOUNT,15) := [D11] + [D12] + [GEN]; // 15 是自定义维度 1 的元素 D11、D12 和 GEN 的临时科目值。此赋值的结果如下

科目 Dest1 金额
@TEMP_ACCOUNT D11 15
@TEMP_ACCOUNT D12 15
@TEMP_ACCOUNT GEN 15
  • 用于定义更复杂的元素集合

Dest1.@MY_SET_6(@TEMP_ACCOUNT_1,5) := [D11] + [D12]; // 5 是自定义维度 1 的元素 D11 和 D12 的临时科目值。此赋值的结果如下

科目 Dest1 金额
@TEMP_ACCOUNT_1 D11 5
@TEMP_ACCOUNT_1 D12 5

Dest2.@MY_SET_7(@TEMP_ACCOUNT_2,3) := [D21] + [D22]; // 3 是自定义维度 2 的元素 D21 和 D22 的临时科目值。此赋值的结果如下:

科目 Dest1 金额
@TEMP_ACCOUNT_2 D21 3
@TEMP_ACCOUNT_2 D22 3

@TEMP_RESULT := @TEMP_ACCOUNT_1 * @TEMP_ACCOUNT_2

科目 Dest1 Dest2 金额
@TEMP_RESULT D11 D21 5*3=15
@TEMP_RESULT D11 D22 5*3=15
@TEMP_RESULT D12 D21 5*3=15
@TEMP_RESULT D12 D22 5*3=15