先说结论
在 Odoo CRM 里,报表最容易被误读的一点就是:
expected_revenue不等于 forecast。
这句话看起来简单,但它几乎决定了你会不会把 CRM 报表看歪。
因为官方给你的分析口径,其实是围绕这些字段搭起来的:
stage_iddate_deadlinedate_closedwon_statuslost_reason_idprorated_revenue
如果你只盯着商机面值 expected_revenue,
你会把三个本来应该分开的东西混在一起:
- 机会原值
- 预测折算值
- 结果归因与复盘信号
这会导致漏斗、forecast 和丢单复盘同时失真。
一、先把“原值”和“预测值”分清
在 crm.lead 里:
expected_revenue是机会面值prorated_revenue是面值 × 概率后的预测口径
也就是说,官方已经明确把:
- “这单如果成了值多少钱”
- “按当前把握折算后,应该算进多少预测”
拆成两个字段。
这个拆分特别重要。
很多团队做 forecast 时,会直接 group 一下 expected revenue, 然后说“这就是本月 pipeline 总额”。
这当然能看总盘子, 但它不是预测。
因为预测关心的不是:
- 理论合同面值有多大
而是:
- 按当前概率和阶段,这些机会折算后大概值多少
而 Odoo 给这个口径预留的字段,正是 prorated_revenue。
二、为什么官方 Pipeline Analysis 默认更适合做预测盘点
在 crm/report/crm_opportunity_report_views.xml 里,crm_opportunity_report_view_pivot 和 graph 视图里,核心 measure 都围绕 prorated_revenue。
这几乎已经把官方态度写在脸上了:
- 机会分析不是只堆原始金额
- 而是更偏向概率折算后的分析面
这件事非常关键。
因为只要系统默认 measure 就偏 prorated_revenue,
说明它希望你在 pipeline 分析里回答的是:
- 哪些阶段累计了多少“有效预测值”
- 到某个 expected closing 时间点前,大概能折算出多少收入
- 不同 team / salesperson 的 pipeline 质量有没有区别
而不是只问:
- 名义上大家手里挂了多少金额
后者更像“存量盘子”, 前者才更像“预测口径”。
三、date_deadline、date_closed、create_date 不是一个日期换着看
官方在搜索视图里专门给了几组日期筛选:
create_datedate_deadlinedate_closed- 对 lead 还有
date_conversion
很多人会把它们当成“反正都是日期字段”。
实际上它们对应的是完全不同的问题:
create_date:机会是什么时候进池的date_deadline:你预计什么时候该关单date_closed:它实际什么时候结束date_conversion:lead 什么时候真正升级成 opportunity
这就意味着,报表上一个月的数据可以有好几种完全不同的含义:
- 本月新进了多少机会
- 本月预计该关多少机会
- 本月实际关了多少机会
- 本月资格化了多少 lead
如果你把这些时间口径混用, 任何 forecast 都会显得“忽高忽低、总是对不上”。
不是系统不准, 而是你在用不同时间语义回答同一个问题。
四、lost reason 不是装饰字段,而是复盘主维度
在机会分析 search view 里,官方明确给了:
filter_won_status_lostgroup_by lost_reason_id
这说明 lost_reason_id 从来不是“写了也行,不写也行”的装饰备注。
在官方设计里,它就是一个可被分析、可被 group、可被追踪的业务原因维度。
crm.lost.reason 模型里甚至还单独计算了 leads_count,
并提供 action 直接打开相关 leads。
这透露出很明确的产品意图:
丢单原因不是给销售留一句文字解释,而是要被当作结构化复盘维度。
所以如果你们团队只是让销售随便在备注里写“价格高 / 没预算 / 竞品赢了”, 却不维护 lost reason 体系, 那 Odoo CRM 的官方分析面其实并没有被真正用起来。
五、为什么 Leads Analysis 和 Pipeline Analysis 不能混着看
视图里其实给了两套主分析动作:
Pipeline AnalysisLeads Analysis
它们虽然都基于 crm.lead,但语义并不一样。
Pipeline Analysis 更偏机会:
- 关注 stage
- 关注 date_deadline
- 关注 prorated revenue
Leads Analysis 更偏入站和资格化:
- 关注 create_date
- 关注 team
- 可同时看 active / inactive
这也解释了为什么官方在 lead 分析动作里默认打开:
- active
- inactive
- create_date period
它想让你看的是线索形成与流入节奏, 而不是直接拿 lead 当机会 forecast。
如果你把这两张报表混在一起看, 就会非常容易出现这种误读:
- 本月线索量很高,所以 forecast 应该也高
现实当然没这么简单。
线索量、资格化率、阶段分布、概率折算值,本来就是不同层的指标。
六、lost / inactive 为什么必须进入复盘视角
官方在 search 里同时给了:
- Active
- Inactive
- Won
- Lost
- Archived
这说明 CRM 报表不是只给你看“还活着的 pipeline”。
一个真正靠谱的销售分析体系,至少要同时回答三件事:
- 现在还有多少活跃机会
- 已经关闭了哪些,结果如何
- 丢掉的是哪一类,原因是什么
所以如果你把 lost / archived 机会一律排除在分析之外, 你就只能看到“当前漏斗长什么样”, 却看不到“这个漏斗过去是怎么漏掉的”。
这会让团队一直忙着修当下,而看不到结构性问题。
七、实战里最容易踩的 5 个坑
1. 把 expected revenue 当成 forecast
它更像原始机会面值。
2. 用 create_date 回答 closing 问题
时间语义一换,报表解释就会跑偏。
3. 不维护 lost reason,只写自由文本备注
复盘维度就永远结构化不起来。
4. 把 Leads Analysis 当成机会预测盘
线索量不等于可成交价值。
5. 分析时只保留 active 记录
你会丢掉最关键的输因数据。
最后一句
Odoo CRM 的报表设计其实已经给了非常明确的提示:
forecast 更该看
prorated_revenue,复盘更该看lost_reason_id,节奏更该分清 create / deadline / closed 几组日期。
一旦把这些口径分开,你会发现很多“CRM 报表总是对不上”的问题,其实不是数据错,而是问题问错了。
DISCUSSION
评论区