span8
span4
注:本文使用FME 2013创建。当前的文章表格数据的操纵是可用的。
经常需要重新排列表格数据的组织,以适应各种用途。一个常见的重组被转换行列,或者调换的表。随着FME你能做到这一点,并使用AttributeExploder变压器的表格数据的其他更复杂的操作如以下解释:
移调电子表格涉及切换的表的列成行例如:
该AttributeExploder变压器可以让你在转FME表格数据,以及更高级的表操作。这种变压器需要行的属性值和针对每个名称/值对创建一个新的功能。通过整合这些功能,您可以重组的表列作为行。在与AttributeExploder进行枢轴更多信息,可以发现http://fmepedia.亚搏在线safe.com/articles/how\u to/pivoting-between-columns-lists-and-records2。执行上一个excel表转置的样品工作区如下所示:
所述第一步骤是将表的行发送到属性雷管和选择爆炸型中对特征,这将创建具有对应于该列的属性或属性的名称(_attr_name)表中的每一个小区的新特征和所述 attribute value or cell value (_attr_value).
我们希望重组来自同一列中的所有功能集成到一个单一的功能,或行,要做到这一点,我们使用一个聚合器变压器和_attr_name其设置为组,我们也将它设置为保持输入由指定名称的属性列表 our list in the list name field under 'Attribute Accumulation'.在运行聚合之前,它是用测试仪或其他一些过滤器是个好主意摆脱不需要的属性。
聚合器的输出现在是在初始表中每列与包含各种细胞的价值观,我们希望,所以我们用一个AttributeRenamer变压器这些列表元素转换为值列表属性的要素。我们几乎完成,但首先我们在柜台及分拣机,以确保行是按照正确的顺序添加。
最终的结果是原始表的转置版本。
您也可以使用AttributeExploder变压器执行更复杂的表格操作。在这个例子中,我们将使用AttributeExploder重新格式化一些表格数据,如下所示:
此示例需要更复杂的重新格式化,因此实现此转换的工作区使用的转换器比上一示例多一些:
这个工作区中的transformer再次是attributeexploder,它分解初始表的行并为每个单元格创建一个新特性,这次我们将把'keep attributes'参数设置为yes,因为我们稍后将按新行的year属性重新组合新行。接下来是一个测试仪,它消除了不需要的格式属性。
接下来,我们使用聚合器转换程序将功能重新组合成新行,这次我们不仅按属性名(_attr_name)分组,还按年份分组,因为我们希望将每年的行分开。我们现在可以添加一个属性创建者来创建新的属性,第一个属性将在原始表的标题行中的每个单元格的值后面追加一年,从而创建具有年和月属性的属性。这也将创建一些附加了种类和年份的值,我们稍后需要过滤和修改这些值。
我们为表中所有唯一的行添加属性,赋予它们通用名r1、r2等。,最后,我们将创建一个新属性,该属性的月份和年份将在稍后用于引用我们的属性,这还将附加一个常量字符串“011231”,我们将使用该字符串作为DateFormatter转换器的技巧,将“total”行放在正确的位置。
测试筛选器用于将具有降水类型的标题行和常规月份行中的年度总行分开。对于头值,我们只希望其中一个作为输出表的第一行,我们将有3个来自聚合器的输出,因此我们使用一个sampler transformer过滤掉除第一个功能之外的所有内容,然后使用attributevaluemapper重命名该属性,使其不再追加一年。对于总行,我们希望将这些行放在每年的月度数据下面,为此,我们必须有某种排序行的方法。在这种情况下,我们可以使用DateFormatter转换器将日期字段转换为自Unix时代以来的秒(一种比较日期的常用方法),这将为我们提供一种将日期与排序器进行比较的方法。
我们在这里使用的技巧是获取附加到date属性的字符串,并告诉dateformatter将12解释为月,将30解释为日,以确保年度总数在该年的12月行之后。我们还将通过另一个日期格式化程序运行每个月的行,但这次我们将01解释为日期,并从值的前缀中提取月份。DateFormatter的输出现在可以用排序器转换器进行数字排序。
排序器的最终输出将所有新行按我们希望的方式排序,并准备好使用csv写入程序写入,记住取消选中“输出字段名”选项,这样我们就不会在头中包含虚拟属性名r1、r2等。
©2019安全亚搏在线软件公司|法律