Pentaho中如何按操作代码条件生成指定列的求和列?
解决指定操作代码分组求和并新增列的问题
针对你需要新增两列计算指定操作代码对应cost总和的需求,之前用Formula和Stream Lookup没解决的核心原因是:Formula仅支持行级计算,无法跨行汇总;Stream Lookup需要先有聚合后的结果集作为查询源,直接用原数据无法得到总和。下面给出可行的ETL实现方案(以Kettle/PDI为例):
方案:分组聚合 + 数据流关联
步骤1:分组计算总和
添加Group By组件,配置如下:
- 若需按特定维度(比如日期、部门)计算分组总和,选择对应维度字段作为分组字段;若要计算全表整体总和,不选择任何分组字段。
- 新增两个聚合字段:
- operational_loss:聚合类型选
SUM,目标字段为cost,过滤条件填写operation_code IN (25, 30) - inventory_loss:聚合类型选
SUM,目标字段为cost,过滤条件填写operation_code IN (26, 28)
- operational_loss:聚合类型选
步骤2:关联原数据流
将原输入数据流和Group By输出的聚合结果流,通过以下组件关联:
- 若按维度分组:用
Merge Join组件,按维度字段做等值关联,将两个求和列合并到原数据中。 - 若全表总和:用
Cartesian Join组件直接关联,让每条原数据都带上全局的operational_loss和inventory_loss值。
替代方案:自定义聚合(复杂场景)
如果需要更灵活的逻辑,可使用User Defined Java Expression组件结合全局变量,但这种方式需要处理累加逻辑,不如分组聚合直观可靠,仅推荐在特殊场景下使用。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

