如何在Pentaho的javascript步骤中读取另一行?
我正在使用Pentaho数据集成进行ETL过程(勺子,在水壶之前) 在Pentaho的修改Javascript步骤中,您可以设置开始、结束和转换脚本。在转换脚本中,您可以编写只对每一行执行的代码,从这里我不知道如何访问前一行的数据(如果可能的话) 我需要访问前一行,因为所有行都是按产品、商店和日期(分别)订购的,目标是从前一行获取现有数量,并将当前行的销售或接收数量添加到当前行中(这将是同一产品、同一商店但不同的日期)。我还需要访问前一行以将当前行的产品和存储区与前一行进行比较,因为如果有人更改,我必须重新启动手头的字段quantity(我使用名为initial_stock的所有列的字段) 关于伪代码,应该是这样的(如果我没有在步骤中编写的代码只针对每一行执行的限制): 这帮不了我如何在Pentaho的javascript步骤中读取另一行?,javascript,pentaho,etl,data-warehouse,kettle,Javascript,Pentaho,Etl,Data Warehouse,Kettle,我正在使用Pentaho数据集成进行ETL过程(勺子,在水壶之前) 在Pentaho的修改Javascript步骤中,您可以设置开始、结束和转换脚本。在转换脚本中,您可以编写只对每一行执行的代码,从这里我不知道如何访问前一行的数据(如果可能的话) 我需要访问前一行,因为所有行都是按产品、商店和日期(分别)订购的,目标是从前一行获取现有数量,并将当前行的销售或接收数量添加到当前行中(这将是同一产品、同一商店但不同的日期)。我还需要访问前一行以将当前行的产品和存储区与前一行进行比较,因为如果有人更改
如果您有任何解决我问题的想法,我们将不胜感激。我怀疑您是否需要使用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;
}
}