我的输入步骤有10行数据,我在for 循环中转换它们,我应该得到10行以上,但在这种情况下,我得到循环对每个数据进行的每次迭代的最后一次转换我尝试使用,appendToFile()但结果数据没有用,pentaho 将其作为唯一标头读取 在我的alert()方法中,我可以看到 for 循环转换数据。var PERIODO = 2var ivar fecha_final//var ruta_acess ="D:\TEST.accdb"//var contenido////var contenido2//var arreglo_completofor (i=0; i<=PERIODO; i++){fecha_final = dateAdd(FECHA_INICIO,"d",i)Alert(i)}正如我在下面的照片中所示,我只得到10条记录,而在另一张照片中出现了我想要的结果,即 for 循环每次迭代的结果数据修改后的 JavaScript 值照片:预期结果:得到的结果:
3 回答
Helenr
TA贡献1780条经验 获得超3个赞
For 循环在 PDI 中并不是真正的东西。转换适用于流经步骤的行集,因此最好使用这种思维方式来提高性能和稳定性。
在您的场景中,每个传入行最终应为三个副本,但具有基于单个新字段(值为 0、1、2)的不同计算值。
在 PDI 中执行此操作的方法是使用Join rows (cartesian product) step。它需要两组输入行并为输入行的每个组合输出一行,可能通过定义必须匹配的关键字段进行过滤。因此,如果主输入中有 10 行,第二行中有 3 行,它将输出 30 行。
您首先需要创建一个数据网格作为第二个输入。定义一个整数字段,将其命名为清晰的名称,然后在第二个选项卡上分别用 0、1 和 2 填充三行。
将两个输入连接到 Join rows 步骤。您不需要配置任何匹配的密钥。Join 步骤的输出将是每个输入行的三行,每行的值分别为 0、1、2。将该输出连接到计算器步骤并使用计算日期 A + B 天来替换 javascript 中的逻辑步。
陪伴而非守候
TA贡献1757条经验 获得超8个赞
为了解决这个我用
var row = createRowCopy(getOutputRowMeta().size()) var idx = getInputRowMeta().size() row[idx++] = DPROCESS
这为迭代的每个结果添加一行。在转换结果只向我显示每个循环的最后一个值之前。
添加回答
举报
0/150
提交
取消