示例:持久性派生字段
您可能将“选择”过程配置为基于派生字段的约束而选择标识,并连接到“快照”过程以输出包括该派生字段的所选记录。如果您将派生字段标记为持久的,那么计算的值将从“选择”过程传递到“快照”过程。
持久性派生字段的另一用途是用于任何聚集类型派生字段(例如,AVG 或 GROUPBY)。这些聚集字段是基于当前单元内的多行数据进行计算的,所以这些聚集字段的值随着单元内容的变化而变化。对于持久性派生字段,您可以选择保留原始的计算值,然后将其传输到其他过程。 如果您选择重新计算派生字段,那么会得到基于当前单元中剩余的记录的计算值。
一个过程采用多个输入时(例如,一个“快照”过程处理来自两个“选择”过程的输入),所有持久性派生字段都可用于下游过程。
如果某个持久性派生字段不能用于所有传入的“选择”过程,且其包括在“快照”过程的输出中,那么“快照”过程在来自没有该持久性派生字段的“选择”过程的所有输出行中针对该持久性派生字段显示空值。
如果某个持久性派生字段不能用于所有传入的“选择”过程,且您将其用于定义细分市场流程,那么对于没有该持久性派生字段的“选择”过程,此细分市场流程具有空的细分市场。
如果您尝试以使用没有跨所有“选择”过程可用的多个持久性派生字段的表达式定义某个细分市场,那么细分市场流程保持未配置状态。
以下准则适用于持久性派生字段 (PDF):
*
*
*
*
*
*
但是,您使用基于表字段的派生字段时,输出间接包括一个表字段。这样,某个标识值的每个实例都有一个记录。(换言之,如果标识值在数据中出现七次,那么就有七个记录输出。)
持久性派生字段只存储每个受众标识的单个值,该值从可用值中随机选择。 这表示处理非规范化数据时,您必须使用 GROUPBY 宏功能来实现期望的行为。
例如,假设您希望从采购交易表中查找客户进行的单笔交易中最高的美元金额,并将其另存为持久性派生字段以供下游处理。您可以编写派生字段(然后,将其持久化为持久性派生字段),如下所示:
Highest_purchase_amount = groupby(CID, maxof, Purch_Amt)
针对如下的非规范化采购交易数据,这将计算如下:
派生字段持久化时,其选择(随机)任何值(都是 $300)并为客户 A 将值 $300 持久化。
第二个不太明显的示例可能是从分数表为特定模型 X 选择预测性模型分数。在此,派生字段可能如下所示:
ModelX_score = groupby(CID, maxof, if(Model = 'X', 1, 0), Score)
数据可能如下所示:
将派生字段 ModelX_Score 持久化将给出期望的结果:分数值 80。创建以下派生字段是错误的:
Bad_ModelX_score = if(Model = 'X', Score, NULL)
这将生成以下结果:
然后,在您将派生字段 Bad_ModelX_score 持久化时,持久值可能为空或者 80。如果您正在处理非规范化数据而派生字段值并非都相同,那么将此派生字段持久化可能导致返回任何值。 例如,定义 Derived_field_Score = SCORE 并将其持久化会为客户 A 生成值 57、72 或 80。要确保期望的行为,您必须对客户标识使用 GROUPBY 宏并保证派生字段值对于该客户的所有数据都相同