我有一个区级数据的XLS文件,其中每个区都在一个区域内。但该地区专栏仅填补该地区的第一个区域。类似的东西:
District Region Population
Foo Bar 1234
Baz 345
Qux 69
Quux Zob 1234
Bax 42
等等。我如何处理它,以便空的区域字段填充正确的区域值(最终输出到CSV,但我可以做到这一点)得到:
District Region Population
Foo Bar 1234
Foo Baz 345
Foo Qux 69
Quux Zob 1234
Quux Bax 42
我实际上是在使用GeoKettle 2.0进行此操作 - 最终这一切都在Shapefile中进行。
答案 0 :(得分:0)
我认为你不会对这种转换有一个通用的步骤,正如@Brian所说,大多数PDI步骤都适用于真正的表格数据。但在这些情况下,您可以使用简单的Modified Java Script步骤来解决它。
我们要做的是编写一个脚本,将最后一个非空District
存储为变量lastDistict
,并在空行上使用它。
首先插入Modified Java Script并将其连接到现有的流中。打开该步骤,右键单击脚本标题(选项卡),然后选择“添加新”。在这个新脚本中只插入:
var lastDistrict;
右键单击此脚本的标题,然后选择“设置启动脚本”。执行此操作,您将告诉Kettle仅在第一次使用该步骤时执行var创建,否则您将在每个新行上丢失lastDistrict
的值。
在同一步骤的另一个脚本上(通常为Script 1
)插入:
if ((District == null) || (trim(Distict) == "")) {
newDistrict = lastDistrict;
} else {
newDistrict = District;
lastDistrict = District;
}
在步骤的底部,您将看到一个名为Fields
的网格。创建一个名为newDistrict
的新字段,并将其类型设置为String。
现在,您将拥有一个新字段newDistrict
,其中包含所有行的值。如果您不想创建新列,只需使用Rename to
填充Disctrict
并将Replace value 'Fieldname' or 'Rename to'
设置为Y
。