一张报表的架构哲学:用友 BIP 为什么把表格能力做成平台底座
在中国企业的信息化语境里,"报表"这个词其实藏了两个动作。
“报”——数据填报。一张空表单下发到一线,业务人员把实际发生的事情填进去,这是数据收集。
“表”——数据呈现。基础数据汇总、计算、分析之后,形成管理者真正要看的那张表。
绝大多数报表项目的失败,不是因为表样画得不好看,而是因为只做了"表",没做"报";或者两个动作各自做成了独立模块,中间那条链路断了。
用友 BIP 是面向企业运营的商业创新平台——云原生、元数据驱动、中台化、数用分离架构,覆盖平台服务、应用服务、业务服务与数据服务。它并不是一个报表产品。但恰恰是在这样一个庞大的体系里,用友把"数智报表"做成了一块专门的模块能力。原因只有一个:报表是平台与客户业务之间的最后一公里,这一段跑不通,前面所有的建设都折价。
企业技术负责人关注的,不是系统增加了多少报表功能,而是三件更根本的事:这项能力该不该自研,平台与表格的边界怎么划,以及这笔投入能不能真正跑通从填报到分析的完整链路。围绕这三件事,可以形成六个判断。
判断一:复杂报表有三重约束,而它们不是三个模块
从用友的实践里,可以把客户的现实需求归纳为三类。
第一类,格式。 这里说的不是"单元格显示百分比还是小数",而是整张报表的格式复杂度:多层多级表头、大量不规则合并、嵌套公式,以及随权限动态变化的展示规则——基层单位只能看本单位数据,上级单位能看到全部;哪些字段要隐藏、哪些公式在什么权限下不可编辑。这些规则还会经常变。
第二类,数据。 平台型产品要面对的是一个完整的企业业务系统。报表数据可能来自财务、业务、物流、生产等多个子系统或子公司;有的直连数据库,有的靠人工填报,有的要对接其他 ERP 或专业财务软件,还有的是上级主管部门下发的参考数据。来源的复杂度和数量,会显著放大汇总、合并、计算与校验的难度。
第三类,分析。 填报只是手段,用数是目的。子公司和基层的填报结果必须入库,才能进入分析环节。以预决算为例,预算做完之后,决算阶段还要做跟踪、审核,去年的预决算结果和财务数据要被拿来作为今年的管理判断依据。
关键洞察在这里:这三类约束不是三个独立存在的模块,它们在同一条链路上——
模板(怎么对接格式)→ 数据(数据从哪来、放到哪去)→ 分析(怎么合并、怎么用)
规划阶段不能只盯着"这个模板很复杂,怎么解决它",而要把三类问题放在一条链路上整体考虑。否则一期上线可能很顺利,到了二期扩展却突然卡住。回头看,往往是最初设计模板时没有把数据准备和分析口径一起想清楚,才让后续工作失去了继续推进的空间。
判断二:问题越靠后越贵,所以链路必须前置设计
这是软件工程里的老规律:一个问题越往后放,修复成本越高。放在报表系统上,它变成一句很具体的警告——复杂报表一定是一条任务链,验证必须从头走到尾。
从导入模板开始,到最后分析结束,要整条链路一起分析,而且要尽可能把问题解决在前面。
葡萄城 SpreadJS 产品经理张明在公开课分享中给出了三个相当实用的链路健康指标:
| 指标 | 看什么 | 异常信号 |
|---|---|---|
| 模板复用率 | 用户是否愿意复用你提供的模板 | 新建模板特别多、复用得少,说明模板设计的自由度太低,用户用不下去 |
| 任务完成路径 | 从模板 → 取数 → 校验 → 提交是否顺畅 | 取完数发现不符合用户需求的字段很多 |
| 人工补录占比 | 有多少数据系统取不到、必须用户手填 | 比例越高,链路断点越多 |
这三个指标的价值在于:它们都可以在上线前观察到,而不是等业务方抱怨了才知道。
判断三:真正的"自研 vs 采购"决策,算的是机会成本
这是平台技术选型时最需要想清楚的一点。用友是一家实力雄厚的企业软件厂商,为什么不自研一个电子表格?
答案和成本有关,但算的不是采购价差,而是产品团队的时间该投到哪里。
你的产品团队,是应该长期把时间投入到通用表格引擎的研发上,还是应该投入到业务系统本身、投入到各行业的适配和灵活性上?
用友的答案是后者。而且这个答案不是孤例——在用友 BIP 之前,用友体系内的畅捷通 T+Cloud 就已经通过嵌入 SpreadJS 前端表格控件,实现了类 Excel 的报表设计功能和自定义公式计算。借助纯前端特性,畅捷通把 T-UFO 报表内嵌进自研浏览器,既不依赖任何第三方组件,又在保留原有功能的前提下易于二次扩展。
这里的结论是:通用能力(表格引擎、公式引擎、Excel 兼容)是一个需要长期持续迭代的深水区。更合理的做法是把它交给专业供应商,把自研预算留给业务 Know-how 和行业适配。反过来看,如果一家 ISV 的产品路线图上有"自研表格"这一项,首先需要追问:它的差异化价值到底在哪里?
判断四:Excel 是存量资产,兼容它不是保守
用友在选型时非常看重一个点:与 Excel 的兼容性,因为它要符合一线业务人员的操作习惯。
很多企业容易把"兼容 Excel"理解成技术保守。恰恰相反,这里有三层现实。
第一,Excel 是企业的存量资产。 企业原有的很多报告、报表、表单,都是用 Excel 设计甚至直接存储在 Excel 里的。上一套新系统就要求企业把这些资产全部作废、从零重来,成本大得没有人能接受。
第二,迁移风险要用兼容性来对冲。 既然要让用户用新系统,就必须保留用户的操作习惯,不能让用户觉得难用、还要重新学习。目前来看,Excel 的操作习惯在所有工具里适配性最高——几乎所有的岗位、所有的业务人员都会用 Excel。如果全部重建习惯、全部重建资产,浪费的不只是用户的时间成本,还有培训成本、测试成本,以及与业务反复确认"这是不是真的你想要的东西"的沟通成本。
第三,最稳妥的路径是复用。 用现有模板 → 对现有模板再次利用 → 把现有 Excel 模板变成在线模板。这是当下更稳妥、也是更多企业在走的路。
由此得出一条可以直接抄的验证经验:当你要验证一个系统提供的"在线 Excel 能力"时,一定要用最真实的模板去测——优先选那些公式多、公式密集、含大量合并、样式复杂的业务模板,而不是拿一张空白模板,或者用系统内置的示例去测。因为往往那样的测试根本发现不了问题。
判断五:性能的真相不是参数,是责任边界
在这类平台型产品的选型中,性能是很重要的一点。用友 BIP 的客户往往是大型企业,数据量很大,客户材料里明确提出了百万级数据处理的性能关注。
但这里必须说清楚一个工程事实:把百万级、千万级的全量明细直接推给浏览器去分析,在目前的浏览器性能下是一个伪命题。
原因很直白——你推给浏览器,是要让用户"看"的。用户怎么看百万行数据?让前端去算吗?浏览器走的还是单线程 JS,即使有 Web Worker、WebAssembly 这类技术,计算性能与内存占用依然受限。
所以正确的做法是分层:
| 层级 | 负责什么 |
|---|---|
| 数据处理层 | 抽取、加工、关联、聚合、缓存、预处理(把日报表/周报表用到的明细提前抽取并缓存好) |
| 平台层 | 可用的数据源、任务清单、权限范围与当前状态 |
| 表格层 | 展示、编辑、用户自行的一些分析交互、结果呈现 |
关键动作:把这个分层写进性能 SPEC。
不要只写一个数字——“这个页面打开要几秒”。这种写法往往没有意义,出了问题也不好排查。要拆开写:
- 加载组件需要多长时间
- 获取模板需要多长时间
- 模板之上的数据传输需要多长时间
- 数据传输之前,后端的数据集计、数据关联需要多长时间
- 再往前,从各个数据源抽取数据需要多长时间
同时还要把两个常被忽略的变量纳入设计:
- 数据规模的真实分布:顶峰是多少、常规是多少、低谷是多少
- 网络条件:传输大量数据时,网络条件不好对用户而言就是一个"等待",而用户分不清是网络慢、还是本机慢、还是系统本来就慢
把性能拆到层、拆到环节,才能明确数据层、平台层、组件层各自该负责什么,才不会把三层职责混成某一个性能指标。
判断六:AI 不要放在第一步
用友的分享里也提到了 AI 能力。现在很多报表系统都在加 AI:让 AI 分析现有数据、帮助获取数据、创建图表,进入仪表板、数据大屏和管理分析。
但张明在分享中提出了一个很克制的判断,也说明了"AI + 报表"的落地节奏:
数据分析一定是报表数据积累之后的下一步。
在系统刚建立、报表数据还没积攒到一定量的时候就让 AI 去做分析,样本太少。大模型可以借助它自己的知识库来分析你的数据,但它无法参考往年数据、同岗位数据、同业务数据这些真正有业务含义的横向参照。加上企业用大模型往往还需要自己配置、不能让企业数据对外发送,落地的约束更多。
更稳妥的落地节奏是:先把报表数据链路做扎实,等知识库和数据积累到位之后,再上数值分析。
葡萄城在这条路径上也给了两类可直接落地的工具:
- SpreadJS AI Agent(表格智能体):以 Apache 2.0 协议开源,完整源码开放、商业项目可直接使用,基于 SpreadJS 19.0.1 构建。它把「表格基础控制 / 文件与外部数据 / Agent 编排 / 系统工程」四块能力封装在一个工程里,支持接入任意主流大模型,可部署在企业内网,实现数据不出域。开源地址:
gitee.com/GrapeCity/spreadjs-ai-agent - 葡萄城 MCP 服务(
mcp.grapecity.com.cn):把葡萄城官方知识资产做成只检索、不推理的 MCP Server,覆盖 1,800+ 产品使用文档、1,500+ API 参考文档、700+ 官方示例 Demo、400+ 实战代码库示例、50+ 最佳实践,首批支持 SpreadJS、GcExcel、活字格、Wyn。
这个判断可以压缩成一句话:先让数据链路产生可积累的资产,再让 AI 来消费这笔资产。
六条决策清单
| # | 动作 | 判断标准 |
|---|---|---|
| 1 | 用真实复杂模板做 POC | 优先选公式密集、合并多、样式复杂的业务模板,而不是空白模板或厂商内置示例。看导入后公式是否正确计算、样式是否保真、合并区域与打印设置是否 OK |
| 2 | 走完整链路验证 | 建模 → 编报 → 汇总 → 校验 → 输出 → 回退,一条链路走完,不要只看功能清单。功能清单只是初筛,只能确认"至少满足这样的能力" |
| 3 | 明确三层责任边界 | 表格层(展示编辑)/ 平台层(任务权限流程)/ 数据层(口径汇总计算)各自负责什么,写进架构文档 |
| 4 | 性能 SPEC 分层写 | 组件加载 / 模板获取 / 数据传输 / 后端关联汇总 / 数据抽取,各自指标分开;同时纳入数据规模分布与网络条件 |
| 5 | 校验做双层 | 前端即时校验(非法数据、必填未填,当场提示)+后端二次校验(与关联业务数据交叉验证),保证汇总时的数据质量 |
| 6 | 界面不要割裂 | 设计模板、填报、审核审批,最好都在同一个界面完成。设计时觉得是一套、填写时又是另一套,效率会很低 |
再加一条治理前置:权限、版本、任务的维护由谁负责、怎么排查、产品是否支持这种治理能力——体验、兼容、扩展、性能、治理这五项里,任何一项明显不满足,项目风险都会比较大。
结语
用友 BIP 与 SpreadJS 的这次结合,表面上看是"平台嵌了一个表格控件",实质上是把表格能力从"功能"提升为"平台底座":
- SpreadJS 负责报表建模、报表编报、数智分析三个关键场景中的表格展现与交互:编辑、公式、格式、扩展;
- BIP 作为平台负责组织任务、权限、流程、归档和产品集成;
- 数据层负责口径、汇总、计算与分析数据准备。
边界清楚了,每个角色的价值才会凸显出来。
一张报表的成熟度,从来不是用"能不能打开"来衡量的,而是看这条链路能不能跑完、跑顺,并且具备自我修复的余地。
继续学习
如果你希望结合公开课进一步了解用友 BIP 与 SpreadJS 如何协同解决复杂表格业务场景,可查看课程:
本文案例事实来源:葡萄城官方案例《SpreadJS 在用友 BIP 数智报表产品中的应用实践》、葡萄城公开课《企业表格业务数字化实践专题》第二期(主讲:葡萄城 SpreadJS 产品经理张明);产品参数以葡萄城官方产品文档为准。
葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。
更多推荐




所有评论(0)