Чтение данных из предыдущего шага в шаге JavaScript в Пентахо - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть столбец в CSV-файле с именем Account Rating, и я использую Modified Java Script Value шаг, чтобы создать новый столбец, используя столбец рейтинга.Я хочу следующий новый столбец:

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

Я попробовал следующий скрипт на шаге Java Script:

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)

Может кто-нибудь помочь мне с моим сценарием?

Ответы [ 3 ]

2 голосов
/ 04 апреля 2019

Вы слишком усложняете проблему.

Перед ответом запомните что-то, есть несколько шагов и комбинаций шагов, которые обеспечивают невероятное количество преобразований для создания пригодных для использования шаблонов, последнее средство - это пользовательское выражение Java, определенное пользователем.

Используйте шаг 'Value Mapper'.

Здесь я использовал Data Grid для генерации ваших холодных, теплых и горячих данных и использовал шаг для отображения. Если ваш вариант использования только для этих 3 слов, то это должно подойти, если вам требуется что-то более надежное, вам может потребоваться больше шагов или, возможно, даже сценарий, но, помните ... Javscript - это последнее средство.

enter image description here

1 голос
/ 05 апреля 2019

Если вы хотите сохранить Имя поля , которое содержит 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

0 голосов
/ 05 апреля 2019

В приведенном выше коде назначение оператора было неверным. Ниже приведен рабочий скрипт на моем шаге 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';
    }
...