节点手册 · 计算

KNIME Rule Engine 条件判断用法

Manipulation → Column → Convert & Replace

按条件给每一行贴标签,相当于 Excel 里一长串嵌套 IF。规则从上往下逐条比,命中第一条就停。

它解决什么问题

原值超过 10 万算重大资产、5 到 10 万算一般、其余算零星 – 这类分档打标就是它。写成规则一行一条,比嵌套 IF 好读得多,改起来也不用数括号。

规则是有顺序的,命中即停。这是整个节点的核心机制。把范围大的规则写在前面,后面更具体的规则就永远轮不到。写规则时从最特殊的往最一般的排。

它在流程里的位置

Missing Value补空值
Rule Engine分档打标
GroupBy按档汇总
Excel Writer出报表

通常放在汇总之前 – 先把明细打上分类标签,再按标签分组,比在汇总阶段拆条件清楚得多。

基本信息

英文原名Rule Engine
中文名称规则引擎(iModel 中文界面)
输入端口1 个数据表
输出端口1 个,行数不变,多一列或覆盖一列
输出类型所有规则的返回值必须是同一种类型,不能一条返回文字一条返回数字

配置项逐条

  • Rule editor规则编辑框

    一行一条规则,写法是 条件 => 结果。列引用用 $列名$,文本结果要加双引号。从上往下比,命中第一条就返回,后面的不再看。

  • 兜底规则TRUE => …

    最后一行写 TRUE => "其他",凡是前面都没命中的行归到这里。不写兜底的话,没命中的行会得到缺失值 – 而且不报错。这是最常见的漏洞,尤其是原数据里有空值时。

  • Append column / Replace column追加新列 / 覆盖原列

    分档打标一般用追加,新增一列标签,原值保留。用于修正某列的取值时才用覆盖。

Rule Engine 配置对话框
规则Rules,从上往下命中即停
$原值$ > 100000 => "重大"
$原值$ > 50000 => "一般"
TRUE => "零星" 顺序写反的话,10 万以上的资产会先命中「一般」那条,永远出不来「重大」。
输出列Append / Replace
追加新列:资产分档覆盖原列

最小示例

规则

$原值$ > 100000 => “重大” $原值$ > 50000 => “一般” TRUE => “零星”

输出

资产编号原值资产分档
FA-003128000重大
FA-00186000一般
FA-0024200零星

第二条规则不用写「大于 5 万且小于等于 10 万」 – 能走到第二条,说明第一条已经没命中,10 万以上的情况自然被排除了。这是命中即停带来的便利。

三个常见坑

  1. 没写兜底规则,结果列里冒出一堆空值。原值为空的行、或者所有条件都不满足的行,都会得到缺失值且不报错。最后一行永远补上 TRUE => "其他" – 哪怕你认为不可能有漏网的。
  2. 规则顺序写反了。把「大于 5 万」写在「大于 10 万」前面,所有大额资产都会被归成「一般」。检查办法:打完标签后按标签分组数一下各档有多少行,某一档为零通常就是顺序问题。
  3. 返回值类型不统一。一条规则返回文字、另一条返回数字,节点会报错。要么全是文字,要么全是数字。想输出数字分档就统一写成 123,别混着来。

什么时候该换别的节点

情况换成
不是打标签,而是按条件筛掉行Rule-based Row Filter,写法一样但用来筛行
纯数值计算,没有条件分支Math Formula
纯文本处理,没有条件分支String Manipulation
分档规则很多且经常变把规则做成一张对照表,用 Joiner 关联进来,改表不改流程
最后一条值得展开说。分档标准如果是业务定的、每年要调,写死在节点里意味着每次调整都要改工作流。做成一张 Excel 对照表用 Joiner 接进来,业务自己改表就行 – 这是把易变的部分从流程里抽出去的通用思路。

标签列里有空值

九成是漏了兜底规则。最后一行加 TRUE => "其他" 再跑一次。

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

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码