跳转至

筛选器

过滤器的概念对于设计 TGKML 脚本非常重要,因为它允许“限制”

  • 输入数据集;
  • 要删除的数据;
  • 要保存到输出多维数据集的数据

TGKML 脚本语法中唯一强制性的过滤器是时间维度上的过滤器。

可能的过滤器有:

  • 提示过滤器。这些过滤器应用于从应用程序 Web 界面、数据录入表单、与应用程序流程相关的工作流模型、流程驾驶舱等运行的所有 MD 计算逻辑。一个典型示例是仅针对 A00 实体运行一组 MD 计算逻辑;
  • 科目维度上的过滤器。这些过滤器应用于给定 TGKML 脚本赋值中存在的单个输入科目;
  • 赋值上的过滤器。这些过滤器应用于 TGKML 脚本的单个“赋值”部分,可视为对提示过滤器的附加限制。例如,某个赋值可能仅从成本中心(在自定义维度 1 上管理)的子集读取和写入。

用于定义输入或输出过滤器的语法如下:

Dimension.Filter([...])

在 FST 项(输入)上使用过滤器时所用的语法为:

{,,Dimension.Filter([...])}

例如,可以编写

  • Entity.Filter([A00]) 以过滤实体 A00;
  • Entity.Filter([A00],[A01]) 以过滤实体 A00 和实体 A01;
  • Entity.Filter([01|$]) 以过滤与层次 01 的节点 $ 相关的所有实体。

输入过滤器

下面来看一些输入过滤器定义的示例。

示例 1

假设我们有以下输入数据集:

Entity Account Scenario Category Dest1 Dest2 Amount
A00 X00000 2013BDG $AMOUNT GEN GEN 150
A00 X00000 2013BDG $AMOUNT D11 D21 80
A00 X00000 2013BDG $AMOUNT D11 D22 30

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

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

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

Entity Account Scenario Category Dest1 Dest2 Amount
A00 X00000 2013BDG $AMOUNT D11 D22 30

示例 2

假设我们有以下输入数据集:

Entity Account Scenario Category Dest1 Dest2 Amount Origin
A00 X00000 2013BDG $AMOUNT GEN GEN 150 PROC_CALCULATED
A01 X00000 2013BDG $AMOUNT D11 D21 80 PROC_CALCULATED
A02 X00000 2013BDG $AMOUNT D11 D22 30 PROC_CALCULATED
C00 X00000 2013BDG $AMOUNT D11 D22 30 PROC_CALCULATED

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

... := [LO].[X00000](Entity.Filter([A00],[A01],[A02]))

并且我们在脚本运行时对实体维度的元素 A00、A01 定义了提示过滤器。

因此系统读取以下数据集:

Entity Account Scenario Category Dest1 Dest2 Amount Origin
A00 X00000 2013BDG $AMOUNT GEN GEN 150 PROC_CALCULATED
A01 X00000 2013BDG $AMOUNT D11 D21 80 PROC_CALCULATED

输出过滤器

下面来看一些输出过滤器定义的示例。

示例 1

假设我们有以下语法

[LO].[X00000](Dest1.Filter([D11], [01|$])) :=...

在这种情况下,系统会删除并随后保存与科目 X00000 相关的原始金额,范围包括自定义维度 1 的元素 D11 以及与层次 01 的节点 $ 相关的自定义维度 1 的所有元素。

另一方面,如果我们有

[LO].[X00000](Entity.Filter([A00])) :=...

则系统仅针对实体 A00 删除并随后保存与科目 X00000 相关的原始金额。

示例 2

假设:

  • 我们将脚本的输出部分定义如下 [LO].[X00000](Entity.Filter([A00],[A01],[A02])) := ...
  • 我们对实体维度的元素 A00、A01、A02 有提示过滤器;
  • 删除前我们有以下数据集:
Entity Account Scenario Category Dest1 Dest2 Amount Origin
A00 X00000 2013BDG $AMOUNT GEN GEN 150 PROC_CALCULATED
A01 X00000 2013BDG $AMOUNT D11 D21 80 PROC_CALCULATED
A02 X00000 2013BDG $AMOUNT D11 D22 30 PROC_CALCULATED
C00 X00000 2013BDG $AMOUNT D11 D22 30 PROC_CALCULATED

系统删除并保存科目 X00000 以及实体 A00、A01、A02 的原始金额。

删除后,数据库中有以下数据:

Entity Account Scenario Category Dest1 Dest2 Amount Origin
C00 X00000 2013BDG $AMOUNT D11 D22 30 PROC_CALCULATED

示例 3

假设:

  • 我们将脚本的输出部分定义如下 [LO].[X00000](Entity.Filter([A00],[A01],[A02])) := ...
  • 我们对实体维度的元素 A00 有提示过滤器;
  • 删除前的数据集与前一个示例相同

系统删除并保存科目 X00000 和实体 A00 的原始数据。

删除后存在以下数据:

Entity Account Scenario Category Dest1 Dest2 Amount Origin
A01 X00000 2013BDG $AMOUNT D11 D21 80 PROC_CALCULATED
A02 X00000 2013BDG $AMOUNT D11 D22 30 PROC_CALCULATED
C00 X00000 2013BDG $AMOUNT D11 D22 30 PROC_CALCULATED

示例 4

假设:

  • 我们定义了以下脚本 [LO].[X00000] := [C00000](Entity.Filter([A00]));
  • 我们对实体维度的元素 A00、A01、A02 有提示过滤器;
  • 脚本为实体 A00 计算出的值等于 50;

此外,假设运行脚本前数据库中的数据如下:

Entity Account Scenario Category Dest1 Dest2 Amount Origin
A00 X00000 2013BDG $AMOUNT GEN GEN 150 INPUT_DEFORM
A01 X00000 2013BDG $AMOUNT D11 D21 80 INPUT_DEFORM
A02 X00000 2013BDG $AMOUNT D11 D22 30 INPUT_DEFORM
C00 X00000 2013BDG $AMOUNT D11 D22 30 INPUT_DEFORM

脚本运行后存在的数据如下:

Entity Account Scenario Category Dest1 Dest2 Amount Origin
A00 X00000 2013BDG $AMOUNT GEN GEN 150 INPUT_DEFORM
A00 X00000 2013BDG $AMOUNT GEN GEN -100 PROC_CALCULATED
A01 X00000 2013BDG $AMOUNT D11 D21 80 INPUT_DEFORM
A01 X00000 2013BDG $AMOUNT D11 D21 -80 PROC_CALCULATED
A02 X00000 2013BDG $AMOUNT D11 D22 30 INPUT_DEFORM
A02 X00000 2013BDG $AMOUNT D11 D22 -30 PROC_CALCULATED

当过滤器仅应用于脚本的输入部分时,根据提示过滤器的设置方式,系统可能会重置过滤器范围之外的数据(由提示过滤器与单个赋值的过滤器相交得出)。