1

我有一个地区级数据的 XLS 文件,其中每个地区都在一个地区中。但是区域列仅填充区域中的第一个区域。就像是:

District  Region Population
Foo       Bar    1234
          Baz    345
          Qux    69
Quux      Zob    1234
          Bax    42

等等。如何处理它,以便用正确的 District 值填充空的 District 字段(最终输出到 CSV,但我可以做到这一点)以获得:

District  Region Population
Foo       Bar    1234
Foo       Baz    345
Foo       Qux    69
Quux      Zob    1234
Quux      Bax    42

我实际上是用 GeoKettle 2.0 做的——最终这一切都在一个 Shapefile 中。

4

1 回答 1

0

正如@Brian 所说,我认为您不会对这种转换有一个通用的步骤,大多数 PDI 步骤都适用于真正的表格数据。但在这些情况下,您可以通过一个简单的 Modified Java Script 步骤来解决它。

我们在这里要做的是编写一个脚本,将最后一个非空变量存储District为变量lastDistict,并在空行上使用它。

首先插入一个修改后的 Java 脚本并将其连接到您已经存在的流中。打开步骤并右键单击脚本的标题(选项卡)并选择“添加新”。在这个新脚本中只插入:

var lastDistrict;

右键单击此脚本的标题,然后选择“设置启动脚本”。这样做,您将告诉 Kettle 仅在第一次使用该步骤时执行 var 创建,否则您将丢失lastDistrict每个新行的值。

在同一步骤的另一个脚本上(通常Script 1)插入:

if ((District == null) || (trim(Distict) == "")) {
    newDistrict = lastDistrict;
} else {
    newDistrict = District;
    lastDistrict = District;
}

在该步骤的底部,您将看到一个名为 的网格Fields。创建一个名为的新字段newDistrict并将其类型设置为字符串。

现在您将拥有一个newDistrict包含所有行的值的新字段。如果您不想创建新列,只需填写Rename toDisctrict设置Replace value 'Fieldname' or 'Rename to'Y.

于 2013-07-05T13:07:10.793 回答