遇到这样一个问题:从EXCEL中读取数据,其中A列数据,其中包含一些为空的字段,想要将A这列数据进行处理,处理之后的原来为空数据的被上一条有值得数据替换,得到如下效果:AA列为原始数据,A为处理后的数据。A AA1 11 112 21 113 34 445 5
工具/原料
kettle4.3版本以上
问题分析
上述问题就是解决在某种条件下将输入处理的数据内进行处理,将输入的某一条数据的值处理后处理给另一条数据。我们可在这个值传递过程中设置一个全局变量,临时将数据的值存在里面(输入的值为非空时),当满足某个条件(读入的数据为空)时将变量的值赋给这个数据。
问题解决思路
针对上述问题,解决思路是,创建一个变量X,当A不为空时,读取数据时每次都将A列的值赋给X,将A的值赋给AA;当遇到A列数据为空时,将变量X中的值赋给AA。
创建kettle模型
1
使用Excel输入将Excel表数据读入进来。kettle作为一个数据加载、转换和清洗工具,支持在其中引入javascript脚本,我们可以在javascript中完成值到变量及变量到值得变换。最后使用Excel输入将处理结果输出即可。构建的模型如下:
2
javascript中代码分析:var AA; //定义新增的输出字段,处理后的A字段的值都存在AA字段中if (A==null){ AA=getVariable('X',''); //判断如果A字段的值为空,则将变量X的值赋给AA } else{ setVariable('X',A,'r'); //如果A字段值不为空,则将A字段的值赋给变量X AA=A; //Ab不为空时还需要将A字段的值赋给AA}
注意事项
使用这种思路解决字段内传值问题时,需要注意setVariable(var,var,'r')设置的变量值在当前JavaScript不生效,但在当前转换中不生效,不能被同一个转换中的其他组件引用。
下一篇:Arduino 数据类型举例