复制以前的值kettle pentaho

时间:2015-05-13 16:26:33

标签: integration pentaho etl kettle pdi

我有一个问题,我正在循环它! :|我希望有人可以帮助我..

所以我有一个输入文件(.xls),这很简单,但有一行(比如说它的“ROW1”)是这样的:

  1. ROW1 | ROW2 | ROW3 | ROW_N
  2. 765 | 1 | AAAA-MM-DD | ...
  3. null | 1 | AAAA-MM-DD | ...
  4. null | 1 | AAAA-MM-DD | ...
  5. 944 | 2 | AAAA-MM-DD | ...
  6. null | 2 | AAAA-MM-DD | ...
  7. 088 | 7 | AAAA-MM-DD | ...
  8. 555 | 2 | AAAA-MM-DD | ...
  9. null | 2 | AAAA-MM-DD | ...
  10. 这里没有标准,就像你可以看到的那样......有一些行为空(ROW1),在ROW2中,有相同的数字,与ROW1有不同的关联(如第5行和第6行,然后是第8行和9)。

    我的目标是复制并粘贴ROW1中的值,当它为null时,在ROW1中,直到不为空。基本上是复制表单上一步,当为null时...

    我正在尝试使用“公式”步骤,使用类似:

    = IF(AND(ISBLANK([ROW1]); NOT(ISBLANK([ROW2])); ROW_n = ROW1; IF(AND(NOT(ISBLANK([ROW1])); NOT(ISBLANK([ROW2] )); ROW_n = ROW1; ROW_n = “”));

    但还没有......

    我尝试过“分析查询”,但也没有尝试过......

    我正在使用流式传输xls文件输入..

    非常感谢,任何帮助都非常赞赏!!

    最诚挚的问候!

2 个答案:

答案 0 :(得分:1)

我发现了一个解决方案,添加了一个“用户定义的Java类”,其代码如下:

import java.util.HashMap; private FieldHelper output_field, card_field; private RowSet out, log; private String previou_card =null;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {

if (first)
{
    first = false;
    out = findTargetRowSet("out");

    output_field = get(Fields.Out, "previous_card");
} else {
    Object[] r = getRow();
    if (r == null) {
        setOutputDone();
        return false;
    }

    r = createOutputRow(r, data.outputRowMeta.size());
    if (previous_card != null) {
        output_field.setValue(r, previous_card);
    }

    if (card_field == null) {
        card_field = get(Fields.In, "Grupo de Cartões");
    }

    String card = card_field.getString(r);
    if (card != null && !card.isEmpty()) {
        previous_card = card;
    }
    // Send the row on to the next step.
    putRowTo(data.outputRowMeta, r, out);
}
return true;

在此之后,我必须采取一些步骤,但这非常有用。

谢谢伙伴!!

答案 1 :(得分:-2)

最后我得到了结果。请按照以下步骤

  1. 下图是完整转换屏幕。 enter image description here

  2. 数据网格数据就像这些。很抱歉,在我当地我没有微软,因为我采用了数据网格。您可以拖放Microsoft Excel输入步骤而不是数据网格。

  3. enter image description here

    1. 拖放一个java脚本步骤,并在下面编写代码。
    2. enter image description here

      1. 转换的最后一步,拖放选择值步骤并选择列。(这些步骤没有必要)
      2. enter image description here

        1. 最终结果将是这些。
        2. enter image description here

          希望这有帮助。