一个 .deepcell 的剖析
八个由纯 XML 构成的部分。在任意编辑器中打开一个,像读散文一样读它。
一个谨慎的人面对一种新文件格式时,问出的第一个问题往往是对的那一个:里面有什么,我又能不能脱身?
黑箱式的格式对厂商而言是护城河,对用户而言是陷阱。你无法审计自己读不懂的东西,也无法导出自己解析不了的东西。而「相信我们,它是结构化的」这句话,从任何商业模式以留存为生的人口中说出,都不值得接受。
所以 .deepcell 恰恰相反。在任意文本编辑器中打开一个,它是 XML,它是 UTF-8,它能在 git 中做差异比较,cat 也能用。它有八个部分,每个部分各司其职,你可以从头到尾像读散文一样读完。
铺陈你正在阅读的这篇文章的那张矩阵,本身就是一个 .deepcell。十六篇博客文章作为条目(Items),六种财务角色加三个客户细分作为上下文(Contexts),受众契合度作为单元格的值。没有公式,没有推理图——schema 极简,因为这个具体用例只需要这么多。我们会一个部分一个部分地走一遍。
八个部分#
Header → StatusDefs → ContextDefs → ItemDefs →
CalcDefs → PresentationDefs → Values → Reasoning
CalcDefs 和 Reasoning 都是可选的。矩阵文件省略了它们。一个三表模型则会用到每一个部分。
1. Header#
谁、什么、何时。自由文本,不在 schema 上耍花样。
<Header>
<Title>DeepCell Blog Content Plan — Role x Segment Coverage Matrix</Title>
<Description>16 planned blog posts mapped against finance role and customer segment...</Description>
<Author>DeepCell content planning</Author>
<CreatedDate>2026-05-13</CreatedDate>
</Header>如果别的什么都不记得,请记住这一点:标题和描述就是放在普通元素里的纯文本。没有专有编码,没有厂商的黑魔法。
2. StatusDefs#
每个值都带有一个状态。在财务模型里,这就是 actual(已报告)、projected(预测)、forecast(一条备选的前瞻路径)以及你的团队需要的任何自定义标签之间的区别。计算引擎用状态来决定哪些值对哪个情景可见——实际值会覆盖预测值,依此类推。
矩阵文件只需要一个:
<StatusDefinitions>
<Status statusId="fit">
<Label>Audience fit</Label>
</Status>
</StatusDefinitions>一条意义的轴线。这份文档要做的就只有这些。
3. ContextDefs#
时间与情景的轴线。在一个现金流折现(DCF)模型里,Q1_2027、Q2_2027、base_case、bear_case 就活在这里。而在矩阵中,「上下文」这条轴线不是时间——而是受众:
<ContextDefinitions>
<Context contextId="SS" level="0" statusRef="fit">
<Label>Sell-side analyst</Label>
</Context>
<Context contextId="BS" level="0" statusRef="fit">
<Label>Buy-side analyst (public markets)</Label>
</Context>
<Context contextId="PV" level="0" statusRef="fit">
<Label>PE / VC analyst</Label>
</Context>
<!-- FPA, CF, IB, Individual, Team, Enterprise ... -->
</ContextDefinitions>财务模型把它的各个时间段铺在这同一条轴线上。形态是一样的,变的只是标签。
4. ItemDefs#
行的轴线。行项目。在模型里它们是 Revenue、COGS、Gross_Margin——带类型、分层(level 0 到 3),并带有父级引用,引擎用这些引用来校验汇总。在矩阵里,它们是博客文章:
<Item itemId="post_03" order="30" level="0">
<Label>[T1] Anatomy of a .deepcell</Label>
<Description>What's inside the file? Am I locked in?</Description>
<DataType>category</DataType>
</Item>level="0" 表示顶层。一张合并损益表会把 Revenue 放在 level 0,把 Product_Revenue 和 Service_Revenue 放在 level 1,再把 SKU 级别的明细行放在它们之下。这种层级是被强制执行的——如果一个父级下面还有子级在干活,你就不能把值直接记到这个父级上。
5. CalcDefs#
矩阵一个都没有。它是一张实打实的表格,每个单元格都是直接写入的。所以 <CalculationDefinitions/> 空在那里:
<CalculationDefinitions/>而在一个三表模型里,正是这个部分让这份文档名副其实。一条计算大致长这样(仅作示意——你的模型会有成百上千条):
<Calculation itemRef="Gross_Margin"
formula="Revenue - COGS"
scenarioRef="base_case"/>引擎自带 NPV、IRR、SUMIF、IF 以及大约另外三十个函数,会解算依赖有向无环图(DAG)、检测环路,并在编辑时重新计算。重点不在于函数库——Excel 的更多。重点在于公式活在它们自己的部分里,与它们产出的值可以分开寻址。这正是它们可审计的原因。
6. PresentationDefs#
数据如何为渲染而布局。本例中是一个工作表、一个区块:
<PresentationDefinitions>
<Sheet sheetId="matrix" name="Coverage Matrix">
<Block blockId="matrix_block"
name="Audience fit by post"
blockType="table"
xAxis="timecontext"
yAxis="item"
itemOrders="10-160"
contextRefs="SS,BS,PV,FPA,CF,IB,Individual,Team,Enterprise" />
</Sheet>
</PresentationDefinitions>正是它告诉渲染器(Web 网格、Excel 插件、导出器——同一份中间表示同时驱动这三者):条目向下排列,上下文横向排列,区块从序号 10 一直跑到 160。呈现与数据是分开的。重新透视是一次呈现编辑,而不是一次模型编辑。
7. Values#
单元格本身。按条目和状态分组:
<ItemGroup itemRef="post_01" statusRef="fit">
<Value contextRef="SS">primary</Value>
<Value contextRef="BS">primary</Value>
<Value contextRef="PV">primary</Value>
<Value contextRef="FPA">secondary</Value>
<Value contextRef="CF">primary</Value>
<Value contextRef="IB">secondary</Value>
<Value contextRef="Individual">primary</Value>
<Value contextRef="Team">primary</Value>
<Value contextRef="Enterprise">primary</Value>
</ItemGroup>把这个区块大声读出来,你就得到了矩阵中一行的规格。「第 1 篇文章对卖方、买方、PE/VC、财务总监、个人、团队和企业而言是主要目标;对财务规划与分析(FP&A)和交易分析师而言是次要目标。」文件准确地告诉你的就是这些,而且就是这个顺序。
一个 .deepcell 里的每一个事实,都是这些 <Value> 元素之一,由条目 × 时间 × 情景 × 状态寻址。四个维度。没有隐藏状态。
8. Reasoning#
矩阵不携带推理图。一个真正的模型则会——用带类型的节点表示主张(Claims)、假设(Assumptions)、证据(Evidence)和论证(Arguments),把一个数字与它背后的信念连接起来。折现率背后的缘由。增长曲线的来源。那张说着这个催化剂支撑那个论点,而这里就是它所引用的申报文件的论证图。
这是一个足够大的题目,值得拥有它自己的文章。展示你的推演过程讲的就是它。
我会被锁死吗?#
不会。deepcell to-excel 随时都能写出一个 xlsx——想要公式就保留公式,不想要就只导出值。推理图和版本历史无法在往返转换中存活(Excel 没地方放它们),但模型本身能干干净净地导出来。你想走,随时可以走。
这就是文件格式和平台之间的区别。我们是有意选了文件格式。完整的论证在为什么要一种新的文件格式里。
亲眼看看吧——在在线演练场中打开一个示例 .deepcell。改一个值,看着它的下游重新计算,检视任何一个数字背后的推理。