它解决什么问题
逐行做数值运算:算折旧、算占比、算差额、做单位换算。输入一张表,输出多一列(或覆盖原列)的表,行数不变。
和 String Manipulation 的分工很直白:数字用它,文本用那个。要按条件分支输出不同结果,用 Rule Engine。
它在流程里的位置
放在补空值之后是有讲究的。参与运算的列只要有一格是空,那一行的计算结果就是空。
基本信息
| 英文原名 | Math Formula |
|---|---|
| 中文名称 | 数学公式(iModel 中文界面) |
| 输入端口 | 1 个数据表 |
| 输出端口 | 1 个,行数不变 |
| 一次算几列 | 一列。要算多列就串多个节点,或者改用 Column Expressions |
配置项逐条
-
Expression表达式
引用列用
$列名$– 双击左侧列名列表自动插入,别手打。支持四则运算、括号,以及左侧列出的函数:取整、绝对值、四舍五入、幂、对数等。 -
Append column / Replace column追加新列 / 覆盖原列
追加会多一列并让你起名。计算阶段建议追加,原值留着好核对;确认无误再考虑覆盖。
-
Convert to Int结果转成整数
勾上则结果转整数。注意它是截断不是四舍五入,3.9 会变成 3。要四舍五入请在表达式里用 round 函数,别指望这个勾选项。
Math Formula 配置对话框
表达式Expression
$原值$ - $累计折旧$
列引用双击左侧列名插入。参与运算的列必须是数值类型。输出方式Append / Replace
追加新列:资产净值覆盖原列
结果转整数Convert to Int
勾选不勾
它是截断不是四舍五入。要四舍五入在表达式里写 round。
三个常见坑
- 整数相除结果被截断。两个整数列相除,结果按整数算,
3 / 4得到 0 而不是 0.75。算占比时这个坑几乎人人踩一次。修法是让其中一边变成小数,比如写成$完成数$ * 1.0 / $总数$。 - 参与运算的列是文本,节点直接报错或选不了。看列名旁的类型图标。数字被读成文本的原因和修法,在列类型那一篇里讲全了。
- 某一格是空,整行结果就是空。缺失值参与任何运算,结果都是缺失值 – 不报错。所以计算之前先想清楚空值怎么处理,是补零、补均值,还是本来就该保留为空。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 要一次算好几列 | Column Expressions,一个节点里写多个输出列 |
| 要按条件输出不同结果 | Rule Engine |
| 是文本处理不是数值计算 | String Manipulation |
| 要跨行算,比如累计求和 | Moving Aggregation 一类的节点,Math Formula 只逐行算 |
最后一条容易被忽略。Math Formula 每次只看当前这一行,它不知道上一行是什么。要算累计、环比、同比这类跨行的东西,得换专门的节点,或者先用 Joiner 把上期数据接到同一行上。

