如何存储一行中的变量以在 Pentaho 水壶中的后续行中使用?

Posted

技术标签:

【中文标题】如何存储一行中的变量以在 Pentaho 水壶中的后续行中使用?【英文标题】:How to store a variable from one line for use in later lines in Pentaho kettle? 【发布时间】:2014-12-15 13:56:40 【问题描述】:

我必须处理一个包含多个聚合级别的电子表格。大多数情况下,这很好,但在一种情况下,我需要将来自最高聚合级别的信息与来自下一个聚合级别的信息结合使用。这是一个例子:

Title,         Platform,    Quantity, Revenue
"Some title",          ,    100,      1000.00
            , "Platform A", 12,       120.00
            , "Platform B", 20,       200.00
            , "Platform C", 68,       680.00

"Some other title",       , 20,       200.00
            , "Platform B", 20,       200.00
...

第一条记录有一个标题“某些标题”以及所有平台的聚合数量和收入指标。这主要是我需要阅读的内容。但是,在一种情况下,比如“平台 B”,我需要检索该平台的特定值,并且我需要知道这些值的标题。

有人知道怎么做吗?

【问题讨论】:

我只想指出,这与 Kettle 处理行的方式完全不一致。行处理应该是可并行化和可分布的。当地缺乏信息以及对其进行估算的顺序的重要性违反了必要的假设。我会推荐一个独立的预处理步骤,您可以在其中应用 LOCF(最后一次观察结转)过程。 +1 虽然 b/c 这是一个合理的用例。 【参考方案1】:

为此我提出了一个 jira:

http://jira.pentaho.com/browse/PDI-13296

因为它不是立即显而易见的。

我只能考虑在“修改后的 javascript 步骤”中使用一小段代码来记住之前的 title 值,然后在 title 为 null 时替换它。

这确实假设您的数据始终以这种方式排序,并且还假设您的第一行始终具有值。

如果你有一些可以分组的东西(即一些你没有显示的附加属性?)那么你可以在该步骤中使用“传递所有行”选项并获取组的“第一个非空”值标题字段的聚合。

【讨论】:

【参考方案2】:

在我看来,您似乎正在尝试扁平化您的数据(有点)。

我可能做错了,但以下是对我有用的类似数据集:

    (假设你的数据已经如上图所示) (标记)公式步骤:IF([TITLE]="";1;0) - 这会在新组的开头标记 0 (Seq) 序列步骤:只是一个从 1 开始的直序列 (SeqCounter) 添加值字段,更改序列步骤:使用“标记”作为更改字段。 (因子)计算器字段:A*B; SeqCounter * 标记 (组)计算器字段:A+B;序列 + 因子

这应该给你一个“GROUP”字段,告诉你每行属于哪个组。

然后我只是拆分数据并使用 GROUP 作为 JOIN 字段重新加入。

我知道这是一个旧帖子,但是由于我搜索时没有找到解决方案,所以我想我会把它放出来让其他人找到。

【讨论】:

以上是关于如何存储一行中的变量以在 Pentaho 水壶中的后续行中使用?的主要内容,如果未能解决你的问题,请参考以下文章

pentaho水壶:从流中获取行数

由于缺少插件,Pentaho 水壶无法运行转换

在 Pentaho 水壶中,如何检查文件名是不是存在?

使用 pentaho 水壶下载文件

在 pentaho 水壶勺中等待

如何使用 Kettle Pentaho 删除远程文件