从固定点读取

在某些情况下,需要定义一个 TGKML 脚本,其中给定金额必须从某个维度的特定元素读取;例如,产品价格可能保存在自定义维度 2 的特定 XY 元素中。

这需要从固定点读取的概念,它允许指定从哪个元素读取给定金额。

用于定义从固定点读取的语法为:

Dimension.[...]

在 FST 项(输入)上从固定点读取时所用的语法为:

{,,Dimension.[...]}

例如,可以编写

  • [20132](Dest2.[XY]) 以指定科目 20132 的值仅从自定义维度 2 的 XY 元素读取;
  • [20132](Time.[2009|12]) 以指定科目 20132 的值仅从 2009 / 12 场景 / 期间读取;
  • [20132](Dest2.[01|XY]) 以指定科目 20132 要读取的值是与层次 01 中以 XY 节点为根的子树相关的所有自定义维度 2 元素之和;

  • [20132](Dest2.Null) 以指定科目 20132 要读取的值是所有自定义维度 2 等于 null 的元素之和;

  • [20132](Dest2.NotNull) 以指定科目 20132 要读取的值是所有自定义维度 2 不等于 null 的元素之和。

当使用从固定点读取功能时,系统会从输入数据集中“移除”X 维度(具有常量值)。也就是说,假设我们有以下输入数据集:

Entity Account Scenario Category Dest1 Dest2 Amount
A00 X00000 2013BDG $AMOUNT GEN GEN 150

并将脚本的输入部分定义如下:

… := [X00000](Dest1.[GEN], Dest2.[GEN])

那么系统读取以下数据集:

Entity Account Scenario Category Amount
A00 X00000 2013BDG $AMOUNT 150

如果我们使用输入过滤器,则不会发生这种情况。也就是说,假设我们将脚本的输入部分定义如下:

… := [X00000](Dest1.Filter([GEN]), Dest2.Filter([GEN]))

那么系统读取以下数据集:

Entity Account Scenario Category Dest1 Dest2 Amount
A00 X00000 2013BDG $AMOUNT GEN GEN 150

这样,假设我们有

[LO].[D00000]:= [X00000](Dest1.[GEN], Dest2.[GEN]) * [C00000]

其中 [C00000] 在数据库中有以下值

Entity Account Scenario Category Dest1 Dest2 Period Amount
A00 C00000 2013BDG $AMOUNT GEN GEN 01 10
A00 C00000 2013BDG $AMOUNT D11 D22 01 20
A00 C00000 2013BDG $AMOUNT D12 D22 01 5

结果为:

Entity Account Scenario Category Dest1 Dest2 Period Amount
A00 D00000 2013BDG $AMOUNT GEN GEN 01 150*10
A00 D00000 2013BDG $AMOUNT D11 D22 01 150*20
A00 D00000 2013BDG $AMOUNT D12 D22 01 150*5

而在存在输入过滤器的情况下

[LO].[D00000]:= [X00000](Dest1.Filter([GEN]), Dest2.Filter([GEN])) * [C00000]

结果为:

Entity Account Scenario Category Dest1 Dest2 Period Amount
A00 D00000 2013BDG $AMOUNT GEN GEN 01 150*10