Notion Formula 2.0 终极实战:从 let/ifs 语法到复杂数据分析与动态进度条

2026 年 3 月 21 日

1. 从 Formula 1.0 到 2.0:范式转移与语法核心 #

在旧版 Notion Formula 1.0 中,写稍有难度的业务公式就像在写“天书”:不仅缺乏变量命名机制导致相同运算必须复制粘贴数遍,嵌套三元表达式 if(cond1, val1, if(cond2, val2, if(cond3, ...))) 更是让后期维护苦不堪言。

Formula 2.0 彻底终结了这一痛点,引入了主流编程语言的标准范式:

  • 链式点语法(Dot Notation):由内向外的洋葱式调用变为左向右的直观管道操作;
  • 局部变量与作用域(let / lets):在公式内部暂存计算结果,消灭重复计算;
  • 原生多分支判断(ifs):扁平化处理复杂的阶梯定价或评级逻辑;
  • 富列表高阶操作(map / filter / reduce):轻松穿透多层关联数据。

2. 局部变量利器:let() 与 lets() 深度剖析 #

在实际业务统计中,我们经常需要计算比率或阶段复合指标。例如“完成率”需要先获取已完成数、总任务数,随后再做除法运算与边界保护。

2.1 lets() 语法结构与执行流 #

/* lets 接受奇数个参数:前 2N 个为 key-value 变量配对,最后 1 个为最终返回表达式 */
lets(
  // 1. 声明总数
  total, prop("Subtasks").length(),
  
  // 2. 声明已完成数 (利用 filter 数组过滤)
  done, prop("Subtasks").filter(current.prop("Status") == "Done").length(),
  
  // 3. 计算完成百分比并做除零保护
  rate, if(total > 0, done / total, 0),
  
  // 4. 组装最终展示文案
  "已完成 " + done + " / " + total + " (" + round(rate * 100) + "%)"
)

使用局部变量的优势显而易见:

  1. 执行效率翻倍:Notion 公式引擎只计算一次 prop("Subtasks").length(),极大降低 CPU 负载;
  2. 逻辑极其自洽:业务新人阅读变量名 total 和 done 即可秒懂业务逻辑。

3. 告别深层嵌套:ifs() 多分支条件最佳实践 #

在项目状态、客户分级或风险评估中,往往存在 4~6 种互斥状态。使用 ifs 函数可保持代码平铺整洁。

3.1 敏捷项目健康度智能诊断公式 #

ifs(
  // 分支 1:逾期且未完成
  prop("Status") != "Done" and dateBetween(prop("DueDate"), today(), "days") < 0,
  "🔴 严重逾期风险",

  // 分支 2:临近 2 天到期且进度不足 50%
  prop("Status") != "Done" and dateBetween(prop("DueDate"), today(), "days") <= 2 and prop("Progress") < 0.5,
  "🟠 资源受阻预警",

  // 分支 3:正常推进中
  prop("Status") != "Done",
  "🟡 正常排期交付中",

  // 兜底分支:已交付
  "🟢 顺利完结归档"
)

4. 数组高阶函数:跨库多层级穿透分析 #

这是 Formula 2.0 最震撼的功能升级。以往需要创建 3~4 个中间 Rollup 属性才能抓取到的孙辈数据,现在可以通过一行数组表达式穿透获取。

4.1 提取项目中所有任务的负责人姓名并去重汇总 #

假设在 Projects 库中关联了多个 Tasks,每个 Task 有 Assignee(多选人员属性):

prop("Tasks")
  .map(current.prop("Assignee")) // 映射为人员数组
  .flat()                       // 展平二维数组
  .map(current.name())           // 提取姓名文本
  .unique()                     // 唯一值去重
  .join("、")                    // 拼装为中文逗号隔开的文本

4.2 计算跨部门项目的加权工时总成本 #

prop("Tasks")
  .map(current.prop("工时(小时)") * current.prop("时薪标准"))
  .sum()

5. 生产级高频公式库实战 #

5.1 十级渐变色动态进度条 #

结合 Unicode 方块字符与数学计算,打造高颜值的看板视觉:

lets(
  val, if(empty(prop("完成率")), 0, min(1, max(0, prop("完成率")))),
  blocks, 10,
  active, round(val * blocks),
  inactive, blocks - active,
  repeat("🟩", active) + repeat("⬜", inactive) + " " + round(val * 100) + "%"
)

5.2 复杂客户价值评分模型(RFM 模型) #

根据最近消费间隔(R)、消费频次(F)、消费总额(M)自动化计算综合客户分值:

lets(
  rScore, ifs(dateBetween(today(), prop("最近下单"), "days") <= 30, 5, dateBetween(today(), prop("最近下单"), "days") <= 90, 3, 1),
  fScore, ifs(prop("年订单数") >= 10, 5, prop("年订单数") >= 3, 3, 1),
  mScore, ifs(prop("年度累计金额") >= 50000, 5, prop("年度累计金额") >= 10000, 3, 1),
  totalWeight, rScore * 0.3 + fScore * 0.3 + mScore * 0.4,
  ifs(
    totalWeight >= 4.2, "🏆 核心高价值客户 (VIP)",
    totalWeight >= 3.0, "🥈 稳健成长客户",
    "🥉 待激活/流失预警客户"
  )
)

通过灵活运用 Formula 2.0,你的 Notion 数据库不再是静态死板的表格,而是一个拥有强大实时计算与业务逻辑推演能力的专业应用系统。

❓ 常见问题与答疑 (FAQ)

高频疑难解析与避坑指南
A

完全不需要。绝大多数核心功能在免费 Free 计划中均可完整体验与实操练习,无需额外付费购买 Plus 或团队版。