免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 915|回复: 6
收起左侧

Test条件语句重做:FME2019中的数据过滤

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-5-21 14:26 | 显示全部楼层 |阅读模式

当我们听到safe说Tester转换器是我们最重要的转换器的时候,那仅仅只是故事的一半。

这是因为Tester(#1最常用的转换器)的条件语句是在FME Desktop中的多个位置使用的参数对话框中定义的。它是TestFilter(#7)参数对话框的关键部分,用于Data Inspector(在Filter函数下),并出现在Edit Breakpoints对话框中(设置条件断点)。总之,它在任何可以进行条件参数值设置的转换器中使用; 对我来说,用得最多的是AttibuteCreator(#2)和AttributeManager(#3)。

所以Tester转换器并不是最重要的。重要的是在各个地方创建条件语句。因此,如果我们对该参数对话框进行更改 - 就像我们为FME 2019所做的那样 - 那么这确实是个大新闻......

多重条件语句

已更改的对话框的主要部分涉及具有多个子句的复杂条件语句。我们以下面的方案为例,看看它是如何改变的。

假设我有一个道路和天气信息的数据集,我想知道是否需要发出一个扫雪机(犁)。我会这样做,如果:

  • 预计降雪量大于100毫米(4英寸)  AND
  • 这条路是主要的(干线)道路 AND
  • 在过去的四个小时里,这条路还没有被清扫过

请注意,所有条件必须为true才能调度发出扫雪机。在FME2018及更早版本中,存在Pass Criteria参数,因此我们将设置各个子句,然后将Pass Criteria设置为All Tests(AND):

在FME2019中,对话框经过重新设计,删除了Pass Criteria参数并将其作为Logic列添加到主表中:

因此,Logic列中的每个条目都设置为AND。这与旧的All Tests(AND)条件相同。如果每个逻辑列都设置为OR,则它将与旧的Any Test(OR)条件相同:

这不是一个巨大的变化,但是,现在可以使用相同的机制来设置复合条件语句......

复合条件

复合条件由AND和OR逻辑(可能更多)的混合组成,将一系列条件语句联系在一起。

我们采用上面的例子,并为调度扫雪机的逻辑增加更多的复杂性。我们现在发出扫雪机需要...

  • 预计降雪量大于100毫米(4英寸) AND
  • 这条路是一条主干道(干线)

OR

  • 预计降雪量大于150毫米(6英寸) AND
  • 这条路是一条不太重要(二级)的道路

AND(以上两者)

  • 在过去的四个小时里,这条路还没有被清扫过

这是AND和OR语句的混合,在FME2018中,它需要像这样的复合条件:

请注意如何根据条件子句编号构造复合条件。这个方法可行,但它有两个缺点:首先是将数字与每个条件混淆的问题,其次,它是与更简单的场景不同的机制。这就是FME2019的用武之地:

我们所做的是删除了将每个子句与数字匹配的需要; 逻辑现在与每一行并排。此外,它现在都是一个单一的机制。逻辑列允许您以相同的方式操作条件子句,无论整体集是简单还是复杂。

作为额外的好处,复合条件获得了曝光。您现在比以前更有可能找到复合功能,这对新用户来说是件好事。对于FME2019,我们一直在考虑新用户,并且相信这些更改将使他们更容易理解这个参数对话框。

例如,构建其第一个模板的用户应该能够更容易地找到此功能并掌握复合条件的概念。从同事那里拿到复杂模板的用户更有可能了解模板的功能。

但对于现有用户,让我们更详细地看一下新特性......

逻辑字段概要

在旧的逻辑字段中,我们会输入散布着AND和OR语句的子句号。现在通过带有下拉菜单的列设置逻辑:

这里的AND和OR运算符,加上NOT运算符,它直接替代以前存在的“否定”列。

您可能会注意到我在其逻辑中使用了带双括号的子句,但它们没有出现在下拉列表中。那是因为列表只是一组示例字符串。你可以(这一点非常重要) 也要键入值!(即您可以单击“逻辑”列中的字段并键入值。)

这就是我可以重新创建复合条件的方法,例如:

(((1和3)或(2和4))和5)

...因为我可以在必要时添加额外的括号(我经常添加附加内容以确定我的逻辑)。

逻辑顺序

您可能还会想到,2019年逻辑的顺序更为重要。
         例如,如果我正在测试:

(x和y)或z

...然后x和y必须是对话框中的连续测试子句。基本上,旧的参数框是一个单独的实体,可以按任何顺序引用行; 但是现在各行组成了复合逻辑,它们的顺序非常重要。

比较模式

另外,请注意比较模式设置曾经是单独的每个子句值,但现在(默认情况下)是所有这些值的单个值:

之所以说是“默认情况下”,因为可以通过使用“指定每个条件”将其更改为给出每个子句模式(和以前一样)。

可用性

在一开始,我提到很多不同的地方都使用这个对话框。它们都是2019年的更新版本,据我所知,这不会对您有任何影响。例如,您不需要升级工作区中的Tester转换器以获取新接口。

因此,新的FME用户将获得收益,而不必担心现有的工作空间,并且 - 正如我所提到的 - 还有其他新用户增强功能,如主画布上的提示:

...以及一个新的“Workbench Essentials”教程,可以让用户更快地启动:

但回到条件语句,我们希望这些变化也能使现有用户受益。简化事情总是很好的。


本文转载来自CSDN作者:fmechina   版权归作者所有

原文链接:https://blog.csdn.net/fmechina/article/details/88990302?spm=1001.2014.3001.5501

141

主题

980万

铜板

3万

好友

管理员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
623267
发表于 2021-5-21 15:13 | 显示全部楼层
回复

使用道具 举报

10

主题

2万

铜板

34

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4394

精华勋章灌水勋章活跃勋章贡献勋章

发表于 2021-5-21 16:44 | 显示全部楼层
谢谢分享
回复

使用道具 举报

4

主题

2621

铜板

19

好友

助理工程师

Rank: 5Rank: 5

积分
302

精华勋章宣传勋章

发表于 2021-6-7 09:50 | 显示全部楼层
感谢分享!
回复

使用道具 举报

0

主题

3万

铜板

9

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
5690
发表于 2021-12-6 14:48 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

1万

铜板

3

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3276
发表于 2022-11-27 19:47 | 显示全部楼层
好资料,正在学习中....
回复 支持 反对

使用道具 举报

3

主题

2380

铜板

1

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
995
发表于 2023-3-20 09:53 | 显示全部楼层
谢谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表