它解决什么问题
和 Row Filter 目的一样 – 输入一张表,输出行数变少、列不变的表。区别只在配置方式:一个是点选,一个是写规则。
条件只有两三条,而且是简单的「都要满足」或「满足其一」?
是
用 Row Filter
点选式配置,不用记语法。绝大多数场景够用。
否
用 Rule-based Row Filter
需要括号分组、混合 AND 与 OR、或者条件有十几条时,写规则更清楚也更好改。
它在流程里的位置
放在清洗之后。规则里的文本比较是精确匹配,前后有空格就命不中。
基本信息
| 英文原名 | Rule-based Row Filter |
|---|---|
| 中文名称 | 基于规则的行筛选(iModel 中文界面) |
| 输入端口 | 1 个数据表 |
| 输出端口 | 1 个。另有 Rule-based Row Splitter,两个输出分别是留下的和筛掉的 |
| 规则语法 | 和 Rule Engine 一样,区别是这里的结果只能是 TRUE 或 FALSE |
规则怎么写
一行一条,写法是 条件 => TRUE。从上往下比,命中第一条就停。
$原值$ > 100000 AND $状态$ = “在用” => TRUE
$所属部门$ IN (“质检部”, “研发部”) => TRUE
NOT MISSING $购置日期$ AND $原值$ > 50000 => TRUE
| 写法 | 作用 |
|---|---|
AND / OR / NOT | 逻辑组合,可以用括号分组,这是它比点选式强的地方 |
IN (…) | 属于某个取值清单,省得写一长串 OR |
LIKE | 通配符匹配,* 代表任意多个字符 |
MATCHES | 正则匹配 |
MISSING $列$ | 判断是否为缺失值。普通比较匹配不上缺失值,必须用它 |
TRUE => TRUE | 兜底规则,放最后一行 |
Rule-based Row Filter 配置对话框
规则从上往下,命中即停
$原值$ > 100000 AND $状态$ = "在用" => TRUE
文本值要加双引号,列引用双击左侧列名插入。命中的行如何处理Include / Exclude TRUE matches
保留命中的行排除命中的行
和 Row Filter 一样,这一项反了输出就是空表或全表。
三个常见坑
- 缺失值匹配不上普通条件。
$状态$ = "在用"对状态为空的行既不算命中也不算不命中 – 结果是它没被留下。要处理这些行,单独加一条MISSING $状态$ => TRUE。 - 文本值忘了加引号。
$状态$ = 在用会被当成语法错误或者当成列名。所有文本值都要用双引号包起来,数字不用。 - 规则顺序写反。命中即停意味着范围大的规则会挡住后面更具体的规则。检查办法:筛完对一下行数,和预期差很多就是顺序问题。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 条件简单,两三条以内 | Row Filter,点选更快 |
| 既要留下的也要筛掉的 | Rule-based Row Splitter,两个输出端口 |
| 不是筛行,是按条件打标签 | Rule Engine,语法一样但结果可以是任意值 |
| 筛选依据在另一张表里 | Reference Row Filter |

