斯潘8
斯潘4
注:本文是使用FME 2013创建的。当前的文章表格数据的处理可用.
通常需要重新安排电子表格数据的组织以适应各种用途。一种常见的重组是将行转换为列,或者调换桌子。使用FME,您可以使用attributeExploder Transformer对表格数据执行此操作和其他更复杂的操作,如下所述:
转置电子表格涉及到将表的列转换为行,例如:
attributeExploder Transformer允许您转换表格数据,以及在FME中进行更高级的表格操作。此转换器获取行的属性值,并为每个名称/值对创建一个新功能。通过聚合这些特性,您可以将表的列重新组合为行。有关使用attributeExploder执行数据透视的详细信息,请参见http://fmepedia.亚搏在线safe.com/articles/how_to/pivoting-between-columns-lists-and-records2.在Excel表上执行转置的示例工作区如下所示:
第一步是将表的行发送到属性分解器,并选择分解类型到特征。这将为表中的每个单元格创建一个新功能,这些单元格的属性与列或属性名(_attr_name)和属性值或单元格值(_attr_value)相对应。
我们希望将同一列中的所有功能重新组合为一个功能,或排,为了做到这一点,我们使用一个聚合转换器,并将其设置为按“属性名”分组,我们还通过在“属性累积”下的“列表名称”字段中为列表指定一个名称,将其设置为保持列表中的输入属性。在运行聚合器之前,最好使用测试人员或其他一些过滤器来除去不需要的属性。
聚合器的输出现在是初始表中每一列的一个特性,其列表属性包含各种单元格值,我们想将这些列表元素转换为值,所以我们使用一个attributeranamer转换器。我们几乎完成了,但首先我们添加了一个计数器和排序器,以确保行的顺序是正确的。
最终结果是原始表的转置版本。
还可以使用attributeExploder Transformer执行更复杂的表格操作。在本例中,我们将使用attributeExploder重新格式化一些表格数据,如下所示:
此示例需要更复杂的重新格式化,因此实现此转换的工作区使用的变压器比前一个示例多:
这个工作区中的转换器也是attributeexploder,它分解初始表的行并为每个单元格创建新功能,这次我们将“keep attributes”参数设置为yes,因为稍后我们将按新行的年份属性重新分组。接下来是一个测试仪,这样就消除了不需要的格式属性。
接下来,我们使用聚合转换器将特性重新组合成新行,这一次,我们不仅按属性名(属性名)分组,还按年份分组,因为我们想把每年的行分开。我们现在可以添加一个属性创建者来创建新的属性,第一个属性将在原始表的标题行中的每个单元格的值后附加一年,从而创建具有年和月属性的属性。这还将创建一些附加了年份的“物种”和“总计”值,我们稍后需要对这些值进行筛选和修改。
我们为表中所有唯一的单独行添加了属性,为它们提供了通用名称R1、R2,等。,最后,我们将创建一个具有月份和年份的新属性,以便在以后使用我们的属性。这还将附加一个常量字符串“011231”,我们将使用它作为dateformater转换器的一个技巧,将“总计”行放在正确的位置。
测试筛选器用于将标题行与降水类型以及年度总计行与常规月份行分开。对于头值,我们只希望其中一个作为输出表的第一行,我们将有来自聚合器的3个输出,所以我们用一个采样变压器过滤掉除第一个特征以外的所有东西,后跟attributeValueMapper以重命名该属性,使其不再追加年份。对于总计行,我们希望将这些行放在每年的月度数据下面,要做到这一点,我们必须有某种方式对行进行排序。在这种情况下,我们可以使用日期格式转换器将日期字段转换为自Unix Epoch以来的秒数(用于比较日期的常用方法),这将为我们提供一种将日期与排序器进行比较的方法。
我们在这里使用的技巧是获取附加到日期属性的字符串,并告诉日期格式化程序将12解释为月份,将30解释为日期,以确保年度总计在当年的12月行之后。我们还将通过另一个日期格式化程序运行每个月的行,但这次我们将把01解释为日期,并从值的前缀中提取月份。数据格式化程序的输出现在可以用排序器变压器进行数字排序。
分拣机的最终输出将我们所有的新行按我们想要的方式排序,并准备好用csv编写器编写,请记住取消选中“输出字段名”选项,这样我们就不会在头中包含带有虚拟属性名R1、R2等的名称。
?2019安全亚搏在线软件公司|合法的