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

时间:2014-12-15 13:56:41

标签: pentaho kettle data-integration pdi

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

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",我需要检索该平台的特定值,我需要知道这些值的标题是什么。

任何人都知道如何完成这项工作?

2 个答案:

答案 0 :(得分:2)

我为此提出了一个jira:

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

因为它不会立即明显直截了当。

我只能考虑在"修改过的javascript步骤"一小段代码,记住以前的标题值,然后在title为null时替换。

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

如果你有可以分组的东西(即你没有显示的某些附加属性?)那么你可以使用"传递所有行"该步骤中的选项并获得" first non null"标题字段聚合上的组的值。

答案 1 :(得分:0)

对我来说,看起来你正试图压扁你的数据(等等)。

我可能做错了,但这里有一个类似的数据集对我有用:

  1. (假设您的数据已经按照上面的顺序排列)
  2. (标记)公式步骤:IF([TITLE] =“”; 1; 0) - 在新组的开头标记0
  3. (Seq)序列步骤:只是以1
  4. 开头的直线序列
  5. (SeqCounter)添加值字段,更改序列步骤:使用“Marker”作为更改字段。
  6. (因子)计算器字段:A * B; SeqCounter * Marker
  7. (组)计算器字段:A + B; Seq + Factor
  8. 这个应该给你一个“GROUP”字段,告诉你每一行都属于哪个组。

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

    我知道这是一篇很老的帖子,但由于我在搜索时没有找到解决方案,我想我会把它放到其他人那里找。