我在csv文件中有一个名为Account Rating
的列,并且我正在使用Modified Java Script Value
步骤使用Rating列创建一个新列。
我要关注新列:
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)
有人可以帮我编写脚本吗?
答案 0 :(得分:2)
您使问题复杂化了。
在回答之前,请记住一些内容,其中包含几个步骤以及这些步骤的组合,它们实现了令人难以置信的大量转换以形成可用的模式,这是最后一种手段是IS用户定义的Java表达式。 >
使用“值映射器”步骤。
在这里,我使用了数据网格来生成冷热数据,并使用了映射步骤。如果您的用例仅用于这3个单词,那么这应该适合,如果您需要更强大的功能,则可能需要更多的步骤,甚至可能是脚本,但是,请记住……Javscript是最后的选择。
答案 1 :(得分:1)
如果您要保留包含SPACE且不能用作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
答案 2 :(得分:0)
在上面的代码中,操作员分配错误。以下是我的JavaScript步骤中的工作脚本:
var new_rating = "Not assigned";
if (Rating == "Cold")
{
new_rating = "IBM";
}
else if (Rating == "Warm")
{
new_rating = 'CTS';
}
else if (Rating == "Hot")
{
new_rating = 'ATG';
}