在 Pentaho 的 JavaScript 步中读取上一步的数据

Read data from previous step in JavaScript step in Pentaho

我在 csv 文件中有一个名为 Account Rating 的列,我正在使用 Modified Java Script Value 步骤创建一个使用评级列的新列。 我想关注新专栏:

Account Rating   New_Rating
---------------------------
Cold             ABC
Warm             DEF
Hot              XYZ

我在 Java 脚本步骤中尝试了以下脚本:

var rating = getInputRowMeta().getString("Account Rating");
var new_rating = "Not assigned";

if (rating === 'Cold')
    new_rating = 'ABC';
else if (rating === 'Warm')
    new_rating = 'DEF';
else if (rating === 'Hot')
    new_rating = 'XYZ';

当我执行它时,出现以下错误:

Can't find method org.pentaho.di.core.row.RowMeta.getString(string)

谁能帮我写剧本?

你把问题复杂化了。

在回答之前,记住一些事情,有几个步骤,以及步骤的组合,实现了令人难以置信的转换数量以制作可用的模式,最后的手段是用户定义的Java表达式.

使用 'Value Mapper' 步骤。

这里我用了一个Data Grid来生成你的冷暖热数据,并使用了映射的步骤。如果您的用例仅适用于这 3 个词,那么这应该适合,如果您需要更强大的东西,您可能需要更多步骤,甚至可能需要一个脚本,但是,请记住...Javscript 是最后的选择。

如果要保留包含SPACE的Field Name,不能作为JavaScript变量名,那么可以修改您的原始代码首先从 RowMetaInterface 对象中检索字段的索引,然后从该索引中获取相应的值:

var mapping = {
    'Cold' : 'ABC'
,   'Warm' : 'DEF'
,   'Hot' : 'XYZ' 
};

var idx = getInputRowMeta().indexOfValue("Accounting Rating");
var rating = row[idx];
var new_rating = mapping[rating] || 'Not assigned';

更多信息:https://help.pentaho.com/Documentation/6.0/0R0/0V0/010/000/020/010