筛选器
过滤器的概念对于设计 TGKML 脚本非常重要,因为它允许“限制”:
- 输入数据集;
- 要删除的数据;
- 要保存到输出多维数据集的数据
TGKML 脚本语法中唯一强制性的过滤器是时间维度上的过滤器。
可能的过滤器有:
- 提示过滤器。这些过滤器应用于从应用程序 Web 界面、数据录入表单、与应用程序流程相关的工作流模型、流程驾驶舱等运行的所有 MD 计算逻辑。一个典型示例是仅针对 A00 实体运行一组 MD 计算逻辑;
- 科目维度上的过滤器。这些过滤器应用于给定 TGKML 脚本赋值中存在的单个输入科目;
- 赋值上的过滤器。这些过滤器应用于 TGKML 脚本的单个“赋值”部分,可视为对提示过滤器的附加限制。例如,某个赋值可能仅从成本中心(在自定义维度 1 上管理)的子集读取和写入。
用于定义输入或输出过滤器的语法如下:
Dimension.Filter([...])
在 FST 项(输入)上使用过滤器时所用的语法为:
{
例如,可以编写
- 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 |
当过滤器仅应用于脚本的输入部分时,根据提示过滤器的设置方式,系统可能会重置过滤器范围之外的数据(由提示过滤器与单个赋值的过滤器相交得出)。