系统如何删除和存储计算数据
当运行 MD 计算逻辑时,为了将计算出的数据存储到应用程序数据库表,系统会执行以下步骤:
- 从目标表中删除数据,过滤条件为:
- 输出科目,即使用 TGKML 脚本计算出的科目
- 来源(PROC_CALCULATED 或 PROC_CALCULATED_BASIC,取决于计算逻辑是“基础”类型还是“其他”类型);
- 已过滤或已覆盖的维度
- 将 TGKML 脚本结果与已存在的、来源不同于 PROC_CALCULATED 或 PROC_CALCULATED_BASIC 的数据之间的差值存储到数据表中,过滤条件为输出科目、已过滤或已覆盖的维度。因此它以“补偿”模式工作。下面来看一些示例以解释此概念。
示例 1:假设我们有一个计算科目 X00000 值的脚本,计算出的值为 150,并且运行脚本前数据库中的数据如下:
| Account | Amount | Origin |
|---|---|---|
| X00000 | 10 | PROC_CALCULATED |
| X00000 | 80 | INPUT_DEFORM |
删除后,数据库中的数据如下:
| Account | Amount | Origin |
|---|---|---|
| X00000 | 80 | INPUT_DEFORM |
由于计算出的值为 150,存储后的数据如下:
| Account | Amount | Origin |
|---|---|---|
| X00000 | 70 | PROC_CALCULATED |
| X00000 | 80 | INPUT_DEFORM |
ForceDelete¶
当即使计划了全局删除也需要强制执行精确删除时,可以将 ForceDelete 语法用作物理科目上日记账语句的输出规范
例如,可以编写:
[LO].[X00000](Entity.Filter([A00]), ForceDelete) := ...