我在输入步骤中有 10 数据行,我将其转换为 for 循环,我应该得到的数据超过 10 行,但在这种情况下,我获得了循环对每个数据的每次迭代的最后一个变换
我尝试使用appendToFile()
,但结果数据没有用,因此pentaho将其读取为唯一的标头
在我的alert()
方法上,我可以看到for循环可以转换数据。
var PERIODO = 2
var i
var fecha_final
//var ruta_acess ="D:\TEST.accdb"
//var contenido
////var contenido2
//var arreglo_completo
for (i=0; i<=PERIODO; i++){
fecha_final = dateAdd(FECHA_INICIO,"d",i)
Alert(i)
}
如下图所示,我仅获得 10 条记录,而另一张照片中显示的是我想要的结果,它们是for循环每次迭代的结果数据
修改后的JavaScript值照片:
预期结果:
获得的结果:
答案 0 :(得分:1)
For循环在PDI中并不是真正的事情。转换处理的是贯穿步骤的行集,因此最好使用这种思维方式来提高性能和稳定性。
在您的方案中,每个传入行最终应为三个副本,但基于单个新字段(值为0,1,2)具有不同的计算值。
在PDI中执行此操作的方法是执行加入行(笛卡尔积)步骤。它接受两组输入行,并为输入行的每种组合输出一行,可能通过定义必须匹配的键字段进行过滤。因此,如果您在主输入中有10行,在第二个中有3行,它将输出30行。
您首先需要创建一个数据网格作为第二个输入。定义一个整数字段,将其命名为明确的名称,然后在第二个选项卡上分别用0、1和2填充三行。
将两个输入都连接到“联接行”步骤。您不需要配置任何匹配的密钥。 Join步骤的输出将为每个输入行三行,每一行的值分别为0、1、2。将该输出连接到Calculator步骤,并使用计算日期A + B天来替换javascript中的逻辑步骤。
答案 1 :(得分:0)
我的意思是,在获得的结果照片中,“ i”变量仅显示“ 3”的值,而我希望具有“ 1”,“ 2”和“ 3”
答案 2 :(得分:0)
为解决此问题,我用
var row = createRowCopy(getOutputRowMeta()。size()) var idx = getInputRowMeta()。size() row [idx ++] = DPROCESS
这将为迭代的每个结果添加一行。 在转换结果向我显示每个循环的最后一个值之前。