span8
span4
在动态工作流中,有时您需要的模式只存在于您的工作空间中(例亚搏在线如,不存在于您的工作空间中)。旋转后的数据)。构建模式特性非常适合于此目的,但是在许多情况下,您需要小心地使用属性转换器构建模式,如上一个示例所示。一定有更好的办法!
在本例中,将使用称为SchemaSetter的特殊自定义转换器来构建模式特性,然后使用FME操作该特性。这是一种常见的模式,应该在需要构建模式并编辑其内容时使用。
SchemaSetter > listgenerator >对数据>ListBuilder的操作
SchemaSetter用于使用当前特性的模式在FME中创建list{}特性。接下来,使用list剥削者将列表分解为各个特性,每个特性包含列表中的一个属性名。第三步是根据需要操作模式(即排序)。最后,使用ListBuilder将所有内容重新整合到模式特性的新版本中。
以下是一些你为什么想要这样做的例子:
在附加的工作空间中,我们使用销售数据集创建一个数据透视表。当前数据如下:
季度 | 销售 | 地区 |
2016年第一季度 | 1936 | 新英格兰 |
2016年第二季度 | 167 | 新英格兰 |
2016年第一季度 | 1235 | 大西洋中部 |
2016年第二季度 | 169 | 大西洋中部 |
我们想要的输出如下:
地区 | 2016年第一季度 | 2016年第二季度 | |
新英格兰 | 1936 | 167 | |
大西洋中部 | 1235 | 169 |
这是围绕区域字段的一个简单的枢轴,还请注意,我们没有对数据进行任何汇总。用FME怎么做呢?
使用AttributeCreator根据' Quarter '的值构建属性名。新属性的值将包含销售数据。
接下来使用聚合器对每个区域进行汇总
设置:
请按区域设置聚合器组
在这一步之后,你已经把你的数据和实际数据看起来像:
2016年第一季度 | 2016年第二季度 | 地区 |
1936 | 167 | 新英格兰 |
1235 | 169 | 大西洋中部 |
我看起来像:
您应该注意到,这些数据的结构是全新的,因为它是直接在工作区中创建的。这是很重要的!动态工作空间总是需要能够引用模式定义才能工作,在这种情况下,我们还没有定义一个模式定义(下面的步骤3将处理这个问题)。
因为我们只想操作一个模式特性(而不是对每个特性都这样做)。我们需要把数据分成两个流。第一个流应该连接到请求者端口中的一个全新特性映射器,而第二个流应该连接到一个采样器。使用采样器将单个特征传递到下一步。见下文:
在这个阶段,我们需要构建模式特性,然后操作它。我们从SchemaSetter变压器:
注意:使用前缀来排除任何额外的FME属性。
如果在使用SchemaSetter之后进行检查,您将看到存储的属性列表现在存储在特性中。
在这个阶段,模式已经创建,但是没有按照您需要的排序顺序组织。让我们用一个列表爆破手来解决这个问题:
模式被划分为每个单独的属性,并存储在FME特性中。是时候操作每个属性了。在附加的示例中,我们使用了一个排序器转换器,但是由于我们讨论的是模式,所以这是满足您特定需求的地方。根据需要修改名称、fme_data_type和列表顺序。
最后一步是将数据合并到一个列表中。使用ListBuilder来完成此任务。
现在,您已经设计并编辑了一个完整的模式特性。太棒了!
将上述步骤3的输出连接到FeatureMerger上的供应商端口。进行1:1匹配,以确保每个特性上都有模式。这将确保编写器在遇到第一个特性时接收模式。
最后,确保写入器是在动态模式下设置的,而源是您的模式特性。
当您运行工作区时,您将得到您想要的输出,并定义您的新模式。
最后的工作区:
避免掉功能- FeatureReader:
如果使用FeatureReader创建模式特性,请注意转换器添加了一个特殊的属性和值:
fme_schema_handling = ' schema only '
该属性告诉编写器将该特性用作模式,然后将其从输出中删除。如果你这样做,这可能是个问题数据和模式的合并在工作空间中,与此模式特性合并的数据在写入时将被删除。例如,如果您合并一个模式特性,以便将其添加到工作区中的所有特性中。
要确保不发生这种情况,请完全删除fme_schema_handling属性,以便写入器不会删除第一个合并的数据特性。
©2019安全亚搏在线软件公司法律