跳转至

使用计算规则插入

重要:此操作只能在具有 ESG 模块许可证的情况下显示和使用。

功能

使用计算规则插入操作允许您执行复杂计算,按源数据集行而非按列处理值。具体而言,给定一个源数据集和一组计算规则,此操作允许您将计算生成的行插入到目标数据集中。

对于此类操作,可以指定特定属性。有关描述,参见操作页面

给定一个操作,对于脚本的每个语句,系统会运行定义的计算,同时考虑每个操作数(无论是输入还是输出)的逻辑维度。与自定义 MD 计算一样,系统可以组合多个统一、非统一或分离的操作数,或无逻辑维度的操作数,对数据中存在的信息进行分组,并应用 MD 语法规则。

逻辑维度和脚本在计算规则脚本页面中定义(参见计算规则页面)。

有关可使用计算规则运行的函数列表,参见计算规则支持的功能

注意:要为该操作运行的脚本集由系统在启动 DTP 时确定。

所有具有操作中指定标签的脚本都会被考虑,其中会选取启用了活动标志的脚本;并选择满足执行条件的脚本。如果指定了开始和/或结束日期,它们必须在期间场景范围内有效。开始和结束日期仅在启动场景/期间提交流程时检查。

示例 1:输出和输入操作数在反转列上具有逻辑维度

源数据集

Operand Field Column_1 Column_2 Unit_Measurement Value Field
OPERAND_INPUT North Woman m 50
OPERAND_INPUT North Men Km 40
OPERAND_INPUT Center Woman m 70
OPERAND_INPUT Center Men 30
OPERAND_INPUT South Woman Km 55
OPERAND_INPUT South Men m 35
OPERAND_INPUT East Rather not say dm 9
OPERAND_INPUT East Rather not say dm 10
OPERAND_INPUT East Rather not say dm 11

逻辑维度表

Operand Code Script Logical Dimension Dataset Field
OPERAND_INPUT GEOGRAPHIC_AREA Column_1
OPERAND_INPUT GENDER Column_2
OPERAND_OUTPUT GEOGRAPHIC_AREA Column_2
OPERAND_OUTPUT GENDER Column_1

脚本

TGKML 1.0 [TARGET].[OPERAND_OUTPUT] := [SOURCE].[OPERAND_INPUT];

目标数据集

Operand Field Column_1 Column_2 Value Field
OPERAND_OUTPUT Woman North 50
OPERAND_OUTPUT Men North 40
OPERAND_OUTPUT Woman Center 70
OPERAND_OUTPUT Men Center 30
OPERAND_OUTPUT Woman South 55
OPERAND_OUTPUT Men South 35
OPERAND_OUTPUT Rather not say East 9
OPERAND_OUTPUT Rather not say East 10
OPERAND_OUTPUT Rather not say East 11

示例 2:输出和输入操作数具有非统一逻辑维度

源数据集

Operand Field Column_1 Column_2 Unit_Measurement Value Field
OPERAND_INPUT North Woman m 50
OPERAND_INPUT North Men Km 40
OPERAND_INPUT Center Woman m 70
OPERAND_INPUT Center Men 30
OPERAND_INPUT South Woman Km 55
OPERAND_INPUT South Men m 35
OPERAND_INPUT East Rather not say dm 9
OPERAND_INPUT East Rather not say dm 10
OPERAND_INPUT East Rather not say dm 11

逻辑维度表

Operand Code Script Logical dimension Dataset Field
OPERAND_INPUT GEOGRAPHIC_AREA Column_1
OPERAND_INPUT GENDER Column_2
OPERAND_OUTPUT GENDER Column_1

脚本

TGKML 1.0 [TARGET].[OPERAND_OUTPUT] := [SOURCE].[OPERAND_INPUT];

计算 Operand_output

系统将值复制到输出,然后按逻辑维度 'GENDER' 对具有相同值的行进行分组。

目标数据集

Operand Field Column_1 Value Field
OPERAND_OUTPUT Woman 175 = (50+70+55)
OPERAND_OUTPUT Men 105 = (40+30+35)
OPERAND_OUTPUT Rather not say 30 = (9+10+11)

审计信息

审计窗口中显示以下信息:

  • 在操作内,与配置步骤中插入的标签相关联的每个脚本
  • 在每个脚本内,脚本中包含的每个语句

  • 对于每个语句,以读取模式和写入模式运行的查询的详细信息

使用参考数据集

在操作设置步骤中,可以设置一个参考数据集,用于对规则脚本每个语句中读取的源数据集值运行隐式转换。

此数据集必须具有:

  • 一个具有 Attribute 参考类型的字段,该字段必须包含要乘以原始数据的转换系数,按其条件。
  • 一个没有参考类型的字段,其名称与源数据集和目标数据集中用作操作数字段的字段相同,以便将输出操作数与相应的转换系数隐式关联。
  • 一个或多个 Condition 参考类型字段,以便能够识别正确的转换系数

与其他 DTP 操作中使用参考数据集的情况一样,条件字段会按代码自动与源数据集字段关联,并且可以通过在参考数据集中插入带 '%' 字符的值来使用"特殊"条件。

例如,A% 表示所有以 A 开头的内容。因此,将使用通过 SQL like 运算符 (%) 定义的条件,而非值之间的相等性。而 null 值则表示对任何值都有效的关系。

重要:此操作不仅使用数据库资源,还在内存中运行,因此在性能方面,必须考虑正在处理的源数据集的行数。 在转换的情况下,参考数据集的行数也可能对性能产生重大影响(根据所执行的测试,在源数据集有数百万行并产生约 100,000 行输出的情况下,应用服务器的内存消耗约为 500 MB)。

对于前面的示例,如果使用相同的源数据集

示例 1

源数据集

Operand_Field Column_1 Column_2 Unit_Measurement Value Field
OPERAND_INPUT North Woman m 50
OPERAND_INPUT North Men Km 40
OPERAND_INPUT Center Woman m 70
OPERAND_INPUT Center Men 30
OPERAND_INPUT South Woman Km 55
OPERAND_INPUT South Men m 35
OPERAND_INPUT East Rather not say dm 9
OPERAND_INPUT East Rather not say dm 10
OPERAND_INPUT East Rather not say dm 11

脚本

TGKML 1.0 [TARGET].[OPERAND_OUTPUT] := [SOURCE].[OPERAND_INPUT];

参考数据集

Operand_Field Unit_Measurement Conversion_Factor Filter_Column Filter_Column
OPERAND_OUTPUT m 10 0
OPERAND_OUTPUT Km 0.1 0
OPERAND_OUTPUT cm 1000 0
OPERAND_OUTPUT dm 10 0
OPERAND_OUTPUT dm 100 Value_Field > 9 1
OPERAND_OUTPUT dm 1000 Value_Field > 10 2

在运行每个语句之前,系统通过按 OPERAND_OUTPUT 筛选参考数据集的行,并将源值乘以所识别的转换系数,来扩充输入数据。

扩充后的源数据集

Operand_Field Column_1 Column_2 Unit_Measurement Value_Field
OPERAND_INPUT North Woman m 500 = (50*10)
OPERAND_INPUT North Men km 4 = (40*0.1)
OPERAND_INPUT Center Woman m 700 = (70*10)
OPERAND_INPUT Center Men 30
OPERAND_INPUT South Woman km 5.5 = (55*0.1)
OPERAND_INPUT South Men m 350 = (35*10)
OPERAND_INPUT East Rather not say dm 90 = (9*10)
OPERAND_INPUT East Rather not say dm 1000 = (10*100)
OPERAND_INPUT East Rather not say dm 11000 = (11*1000)

计算 Operand_output

系统将值复制到输出,同时保持逻辑维度的拆分。

目标数据集

Operand_Field Column_1 Column_2 Value_Field
OPERAND_OUTPUT Woman North 500
OPERAND_OUTPUT Men North 4
OPERAND_OUTPUT Woman Center 700
OPERAND_OUTPUT Men Center 30
OPERAND_OUTPUT Woman South 5.5
OPERAND_OUTPUT Men South 350
OPERAND_OUTPUT Rather not say East 90
OPERAND_OUTPUT Rather not say East 1000
OPERAND_OUTPUT Rather not say East 11000

示例 2

源数据集

Operand_Field Column_1 Column_2 Unit_Measurement Value Field
OPERAND_INPUT North Woman m 50
OPERAND_INPUT North Men Km 40
OPERAND_INPUT Center Woman m 70
OPERAND_INPUT Center Men 30
OPERAND_INPUT South Woman Km 55
OPERAND_INPUT South Men m 35
OPERAND_INPUT East Rather not say dm 9
OPERAND_INPUT East Rather not say dm 10
OPERAND_INPUT East Rather not say dm 11

脚本

TGKML 1.0 [TARGET].[OPERAND_OUTPUT] := [SOURCE].[OPERAND_INPUT];

参考数据集

Operand_Field Unit_Measurement Conversion_Factor Filter_Column Filter_Column
OPERAND_OUTPUT m 10 0
OPERAND_OUTPUT Km 0.1 0
OPERAND_OUTPUT cm 1000 0
OPERAND_OUTPUT dm 10 0
OPERAND_OUTPUT dm 100 Value_Field > 9 1
OPERAND_OUTPUT dm 1000 Value_Field > 10 2

在运行每个语句之前,系统通过按 OPERAND_OUTPUT 筛选参考数据集的行,并将源值乘以所识别的转换系数,来扩充输入数据。

扩充后的源数据集

Operand_Field Column_1 Column_2 Unit_Measurement Value Field
OPERAND_INPUT North Woman m 500 = (50*10)
OPERAND_INPUT North Men km 4 = (40*0.1)
OPERAND_INPUT Center Woman m 700 = (70*10)
OPERAND_INPUT Center Men 30
OPERAND_INPUT South Woman km 5.5 = (55*0.1)
OPERAND_INPUT South Men m 350 = (35*10)
OPERAND_INPUT East Rather not say dm 90 = (9*10)
OPERAND_INPUT East Rather not say dm 1000 = (10*100)
OPERAND_INPUT East Rather not say dm 1000 = (10*100)

计算 Operand_output

系统将值复制到输出,然后按 "GENDER" 逻辑维度对具有相同值的行进行分组。

目标数据集

Operand_Field Column_1 Value Field
OPERAND_OUTPUT Woman 125.5 = (500+700+5.5)
OPERAND_OUTPUT Men 384 = (4+30+350)
OPERAND_OUTPUT Rather not say 12090 = (90+1000+11000)