如何在Pentaho的javascript步骤中读取另一行?

如何在Pentaho的javascript步骤中读取另一行?,javascript,pentaho,etl,data-warehouse,kettle,Javascript,Pentaho,Etl,Data Warehouse,Kettle,我正在使用Pentaho数据集成进行ETL过程(勺子,在水壶之前) 在Pentaho的修改Javascript步骤中,您可以设置开始、结束和转换脚本。在转换脚本中,您可以编写只对每一行执行的代码,从这里我不知道如何访问前一行的数据(如果可能的话) 我需要访问前一行,因为所有行都是按产品、商店和日期(分别)订购的,目标是从前一行获取现有数量,并将当前行的销售或接收数量添加到当前行中(这将是同一产品、同一商店但不同的日期)。我还需要访问前一行以将当前行的产品和存储区与前一行进行比较,因为如果有人更改

我正在使用Pentaho数据集成进行ETL过程(勺子,在水壶之前)

在Pentaho的修改Javascript步骤中,您可以设置开始、结束和转换脚本。在转换脚本中,您可以编写只对每一行执行的代码,从这里我不知道如何访问前一行的数据(如果可能的话)

我需要访问前一行,因为所有行都是按产品、商店和日期(分别)订购的,目标是从前一行获取现有数量,并将当前行的销售或接收数量添加到当前行中(这将是同一产品、同一商店但不同的日期)。我还需要访问前一行以将当前行的产品和存储区与前一行进行比较,因为如果有人更改,我必须重新启动手头的字段quantity(我使用名为initial_stock的所有列的字段)

关于伪代码,应该是这样的(如果我没有在步骤中编写的代码只针对每一行执行的限制):

这帮不了我


如果您有任何解决我问题的想法,我们将不胜感激。

我怀疑您是否需要使用JavaScript来解决这个问题。查看
分析查询
步骤。这将允许您将上一行中的值带入当前行


JavaScript步骤为您提供了极大的灵活性,但如果您可以使用常规转换步骤来实现,则通常会快得多。

我怀疑您是否需要使用JavaScript来实现这一点。查看
分析查询
步骤。这将允许您将上一行中的值带入当前行


JavaScript步骤为您提供了极大的灵活性,但如果您可以使用常规转换步骤来实现,则速度通常会快得多。

我可以请您重新考虑一步一步地分组吗?它似乎适合您的场景。 如果您根据您的组合日期/商店/物品对流进行排序,则可以计算销售/接收数量的累计总和。通过这种方式,您可以获得库存变化的运行总计,该总计将按组重置


还可以看看这篇文章和它引用的论坛帖子

我可以请您一步一步地重新考虑这个小组吗?它似乎适合您的场景。 如果您根据您的组合日期/商店/物品对流进行排序,则可以计算销售/接收数量的累计总和。通过这种方式,您可以获得库存变化的运行总计,该总计将按组重置


还可以看看这篇文章和它引用的论坛帖子

使用分析查询。通过使用此步骤,您可以访问上一条/下一条记录。实际上,不仅可以读取上一条记录和下一条记录,还可以向前或向后读取N行

检查以下URL以获得更清晰的解释:


  • 使用分析查询。通过使用此步骤,您可以访问上一条/下一条记录。实际上,不仅可以读取上一条记录和下一条记录,还可以向前或向后读取N行

    检查以下URL以获得更清晰的解释:


  • 谢谢大家,我找到了解决问题的办法

    我综合了您的所有建议,并使用了
    分析查询
    修改的Javascript
    分组步骤

    虽然这个问题没有很好的表述,但我遇到的问题是计算每行的库存水平(每种产品、日期和门店组合有一行)

    首先(显然比按
    product\u id
    store\u id
    date
    升序对行进行排序要晚),我使用
    分析查询
    步骤按
    product\u id
    store\u id
    对行进行分组,因为在这一步骤中,我获得了一个新字段
    previous\u date
    ,以标识每个组的第一行(
    previous_date=null
    位于日期最早的组的行上)

    然后我需要在第一行计算每组[产品,商店]的
    现存量
    (每组的第一个日期,因为它是按日期排序的),因为每组的
    初始库存
    不同。这是因为
    (总和(收到的数量)-总和(售出的数量))!=现存量

    最后(关键在这里),我使用了@andtorg建议的
    groupby
    步骤,并按照下图所示进行操作

    这个建议非常有用。它甚至包括两个
    .ktr
    示例文件


    非常感谢您的帮助!

    谢谢大家,我找到了解决问题的办法

    我综合了您的所有建议,并使用了
    分析查询
    修改的Javascript
    分组步骤

    虽然这个问题没有很好的表述,但我遇到的问题是计算每行的库存水平(每种产品、日期和门店组合有一行)

    首先(显然比按
    product\u id
    store\u id
    date
    升序对行进行排序要晚),我使用
    分析查询
    步骤按
    product\u id
    store\u id
    对行进行分组,因为在这一步骤中,我获得了一个新字段
    previous\u date
    ,以标识每个组的第一行(
    previous_date=null
    位于日期最早的组的行上)

    然后我需要在第一行计算每组[产品,商店]的
    现存量
    (每组的第一个日期,因为它是按日期排序的),因为每组的
    初始库存
    不同。这是因为
    (总和(收到的数量)-总和(售出的数量))!=现存量

    最后(关键在这里),我使用了@andtorg建议的
    groupby
    步骤
    while(all_rows_processed()){
    
        current_row.quantity_on_hand = current_row.initial_stock;
    
        while(id_product_current_row == id_product_previous_row && id_store_current_row == id_store_previous_row){
    
            current_row.quantity_on_hand = previous_row.quantity_on_hand + current_row.stock_variation;
        }
    }