西班牙
斯潘4
在动态工作流中,有时您的理想模式不存在于任何其他地方,而是亚搏在线存在于您的工作空间内(例如)。旋转数据之后)。为此,构建模式特性非常好,但在许多情况下,您需要使用属性转换器仔细构建模式,如上一个示例所示。一定有更好的办法!
在本例中,将使用一个名为schemasetter的特殊自定义转换器来构建模式特性,然后使用fme操作该特性。这是一种常见的模式,应该在需要构建模式并编辑其内容时使用。
schemasetter>listexplider>manipulation of the data>listbuilder
schemasetter用于使用当前功能的模式在fme中创建list{}功能。接下来,使用listexploder将列表拆分为各个要素,每个要素都包含列表中的属性名称。第三步是根据需要操作模式(即排序)。最后,使用listbuilder将所有内容重新组合到schema特性的新版本中。
以下是一些您希望执行此操作的示例:
在附加的工作区中,我们将使用销售数据集创建一个透视表。当前数据如下:
四分之一 | 销售额 | 地区 |
2016年第一季度 | 1936年 | 新英格兰 |
2016年第二季度 | 167 | 新英格兰 |
2016年第一季度 | 1235年 | 大西洋中部 |
2016年第二季度 | 169个 | 大西洋中部 |
我们需要的输出如下:
地区 | 2016年第一季度 | 2016年第二季度 | |
新英格兰 | 1936年 | 167 | |
大西洋中部 | 1235年 | 169个 |
这是一个围绕region字段的简单轴心,还需要注意的是,我们没有对数据进行任何汇总。我们怎么能用FME做到这一点?
使用attributecreator根据“quarter”的值生成属性名称。新属性的值将包含销售数据。
接下来使用聚合器对每个区域进行汇总
设置:
请将聚合器组设置为区域
在这一步之后,您已经对数据进行了旋转,实际数据如下所示:
2016年第一季度 | 2016年第二季度 | 地区 |
1936年 | 167 | 新英格兰 |
1235年 | 169个 | 大西洋中部 |
我的看起来像:
您应该注意到,该数据是以一种全新的方式构建的,因为它是直接在工作区内创建的。这很重要!动态工作区始终需要能够引用架构定义才能工作,在这种情况下,我们还没有定义一个架构定义(下面的步骤3将解决这个问题)。
因为我们只想操作一个模式特性(而不是对每个特性都这样做)。我们需要把数据分成两个流。第一个流应连接到请求程序端口中的全新功能合并,而第二个流应连接到采样器。使用采样器将一个特征传递到下一步。见下文:
在这个阶段,我们需要构建模式特性,然后对其进行操作。我们将从计划者变压器:
注意:使用前缀排除任何额外的fme属性。
如果在使用schemasetter之后进行检查,您将看到存储的属性列表现在存储在特性上。
在此阶段,架构已创建,但未按所需的排序顺序进行组织。让我们使用listexploder解决这个问题:
该模式被划分为每个单独的属性,并存储在fme特性中。操作每个属性的时间。在所附的例子中,我们使用了一个分类变压器,但由于我们讨论的是一个模式,这是您的特殊需要得到解决的地方。根据需要修改名称、fme_data_type和列表顺序。
最后一步是将数据合并到一个列表中。使用listbuilder来实现这一点。
现在您已经有了一个完整的模式功能,它已经被设计和编辑。好极了!
将上面步骤3的输出连接到FeatureMerger上的供应商端口。执行1:1匹配以确保架构存在于每个功能上。这样可以确保编写器在遇到第一个功能时接收架构。
最后,确保writer设置为动态模式,并且源是您的模式功能。
当您运行工作区时,您将在定义了新模式的情况下获得所需的输出。
最终工作区:
避免删除功能-FeatureReader:
如果使用FeatureReader创建架构功能,请注意转换器会添加一个特殊的属性和值:
fme_schema_handling='仅架构'
此属性告诉编写器将该功能用作架构,然后将其从输出中移除。如果你做了任何事情数据和模式的合并在工作区中,与此架构功能合并的数据在写入时将被删除。例如,如果合并架构功能,以便将其添加到工作区中的所有功能中。
要确保不会发生这种情况,请完全删除fme_schema_handling属性,以便写入程序不会删除第一个合并的数据功能。
?2019安全亚搏在线软件公司|合法的