节点手册 · 行列操作

KNIME Rule-based Row Filter 规则筛行用法

Manipulation → Row → Filter

用写规则的方式筛行。条件多到点选式排不下、或者需要括号嵌套和优先级时,换它。

它解决什么问题

Row Filter 目的一样 – 输入一张表,输出行数变少、列不变的表。区别只在配置方式:一个是点选,一个是写规则。

条件只有两三条,而且是简单的「都要满足」或「满足其一」?
用 Row Filter 点选式配置,不用记语法。绝大多数场景够用。
用 Rule-based Row Filter 需要括号分组、混合 AND 与 OR、或者条件有十几条时,写规则更清楚也更好改。

它在流程里的位置

Excel Reader读进来
Rule-based Row Filter按规则筛
GroupBy汇总

放在清洗之后。规则里的文本比较是精确匹配,前后有空格就命不中。

基本信息

英文原名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 一样,这一项反了输出就是空表或全表。

三个常见坑

  1. 缺失值匹配不上普通条件。$状态$ = "在用" 对状态为空的行既不算命中也不算不命中 – 结果是它没被留下。要处理这些行,单独加一条 MISSING $状态$ => TRUE
  2. 文本值忘了加引号。$状态$ = 在用 会被当成语法错误或者当成列名。所有文本值都要用双引号包起来,数字不用。
  3. 规则顺序写反。命中即停意味着范围大的规则会挡住后面更具体的规则。检查办法:筛完对一下行数,和预期差很多就是顺序问题。

什么时候该换别的节点

情况换成
条件简单,两三条以内Row Filter,点选更快
既要留下的也要筛掉的Rule-based Row Splitter,两个输出端口
不是筛行,是按条件打标签Rule Engine,语法一样但结果可以是任意值
筛选依据在另一张表里Reference Row Filter

规则写完筛出来是空的

先查「保留命中 / 排除命中」有没有反,再查文本值有没有加引号。

iModel 专属客服
网页直接对话,无需微信
4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码