【问题标题】:Print For-Loop results in a table在表格中打印 For-Loop 结果
【发布时间】:2019-06-03 16:16:44
【问题描述】:

我的输入步骤中有 10 行数据,我在 for-loop 中转换它们,我应该得到超过 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 值照片:

预期结果:

得到的结果:

【问题讨论】:

    标签: javascript pentaho kettle


    【解决方案1】:

    For 循环在 PDI 中并不是真正的东西。转换适用于通过这些步骤的行集,因此最好使用这种思维方式来提高性能和稳定性。

    在您的场景中,每个传入的行最终应为三个副本,但具有基于单个新字段的不同计算值(值为 0、1、2)。

    在 PDI 中执行此操作的方法是使用 加入行(笛卡尔积) 步骤。它需要两组输入行并为输入行的每个组合输出一行,可能通过定义必须匹配的关键字段进行过滤。因此,如果主输入有 10 行,第二行有 3 行,它将输出 30 行。

    您首先需要创建一个数据网格作为第二个输入。定义一个整数字段,将其命名为清晰的名称,然后在第二个选项卡上分别用 0、1 和 2 填充三行。

    将两个输入连接到连接行步骤。您不需要配置任何匹配的密钥。 Join 步骤的输出将是每个输入行的三行,每个值分别为 0、1、2。将该输出连接到 Calculator 步骤并使用计算 Date A + B days 替换 JavaScript 中的逻辑一步。

    【讨论】:

    • 感谢您的回答,我是 pentaho 及其功能的新手。实际上,我只使用 javascript 步骤完成了我的项目,但就像我看到它不仅仅是 JS 一样,而且就像你说的那样,当我们谈论性能和稳定性时最好。我将尝试重新创建我这样做的原因,但使用 pentaho 的更多功能。再次感谢!
    • ......顺便说一句......最近你创建了一个序列......我有不同的开始 - 结束日期,每个日期都有12个月,6个月或1个月。 ..我知道有一种方法可以根据这个日期的前一个条件来创造条件和创造安全......如果你有时间我想知道,但同时我会看看我怎么做。
    【解决方案2】:

    我的意思是,在获得的结果照片中,“i”变量只显示“3”的值,我想要“1”、“2”和“3”

    【讨论】:

      【解决方案3】:

      为了解决这个问题,我使用了

      var row = createRowCopy(getOutputRowMeta().size()) var idx = getInputRowMeta().size() 行[idx++] = DPROCESS

      这将为迭代的每个结果添加一行。 在转换结果只向我显示每个循环的最后一个值之前。

      【讨论】:

      • 您可以使用Clone Row步骤,为Clone number设置一个字段,然后使用Calculator步骤(Date A + B Months) 设置对应的日期。
      猜你喜欢
      • 2017-06-14
      • 2016-10-04
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2017-05-11
      • 2019-08-09
      相关资源
      最近更新 更多