2017-02-22 66 views
0

我有一个包含数字的列的数据集。但是,该列中的某些行缺少数据。一个短划线( - )被放置在单元格中,而不是数字。在Pentaho中过滤行

我想要发生的是用破折号分隔这些行,并将它们输出到单独的excel文件。那些没有破折号的,应该输出到一个csv文件。

我试着“过滤器行”,但它给我一个错误:

Unexpected conversion error while converting value [constant String] to a Number 

constant String : couldn't convert String to number 

constant String : couldn't convert String to number : non-numeric character found at position 1 for value [-] 

我的条件是,如果

Column1 CONTAINS - (String) 
+2

是您的来电字段定义为一个数字可能?最好将其定义为字符串,然后在过滤后再将“好”行转换为数字。 – Cyrus

回答

0

您可以将缺失值指标(如破折号或任何其他字符串)在文本文件输入中为空 - 请参阅字段选项“空如果”。这样,您仍然可以使用元数据检测功能,并且不会通过到达数字字段的短划线来跳过。

对于CSV文件输入,您应该坚持使用字符串数据类型,直到Null-If步骤清除了值,以便您可以在选择值步骤中将数据类型更改为数字。

如果您必须保留短划线字符,请不要使用元数据检测(因为它建议使用数字类型Number)或使用更多行进行采样(因此会遇到带有短划线的字段),或者只是先将数据类型恢复为String保存并运行转换。

0

我的解决方案在于第一个'替换为字符串'。我将短划线替换为数字,并且可以轻松地将其与其余数字区分开来(我使用了9999),并将其与我的其余过程继续进行。

在过滤行中,我对数据类型不再有任何问题,因为我的变量和条件都包含数字,因此它不再需要转换任何东西。

过滤行后,我添加了'Null-if'来删除随机9999,我使用 只是为了有一些东西来代替短划线。

之后,分离就像我希望的一样。

感谢@marabu的Null-if想法。

See image

0

你不能尝试转换为数字在选择步骤和处理程序中的错误,如果不能转换为数字,表示为( - )

enter image description here