乐于分享
好东西不私藏

当 Excel 插件遇上 SAP:我把大集团财务分析的"灵魂能力"搬进了 Excel-DNA Skill

当 Excel 插件遇上 SAP:我把大集团财务分析的"灵魂能力"搬进了 Excel-DNA Skill
我十年 Office 开发的终极大招:一个 Skill,让 AI 帮你做出最专业的 Excel 插件
上次发完推文后,我又干了两天两夜——这套 ExcelDNA Skill 已经从"工具"变成"武器库"

上一篇推文之后,我又给 Skill 加了一个"王炸级"的示例项目。不是那种花五分钟就能写完的 Demo——而是我花了多年时间,在一家大型集团公司的 SAP 项目中实战验证过的核心技术。今天,我要把一个真正的"工业级"案例拆给你看。


一、先别急着往下翻,让我告诉你这篇文章的主角是谁

在这篇文章里,我会把三个东西放在一起给你看:

1. 一个全新的 Skill 示例项目——「wps-udf-tree-collections」

这是我刚刚做完、合并进 Skill 蓝图体系里的第八套蓝图。它的核心能力是用 Excel-DNA 的自定义函数,在 Excel 里直接操作父子维度的组织架构树、科目结构树,并基于树结构做事实指标的层级汇总。

2. 两个真实的生产级 SAP 项目

我在某大型制造集团做的两个 SAP BPC/BW 报表分析 Excel 插件——一个专注于财务报表工作台与审核流转,一个专注于多维即席分析与透视查询。这两个项目不是"做一个玩玩"的 Demo,而是真正的企业级生产系统,每天被几十个财务人员高强度使用。

3. 一个你听完会拍大腿的结论

Excel-DNA 的"内存对象跨公式共享"特性,和父子维度的树结构查询,是天作之合。

不是因为我把这两者放在一起所以它们是一对——而是我在 SAP 项目里踩了无数坑之后,才真切体会到:这才是 Excel 插件该有的样子。


二、一个灵魂拷问:SAP 为什么在财务领域"封神"?

在讲技术之前,我想先跟你聊点"道"层面的东西。

很多人提起 SAP,脑子里蹦出来的词是"贵""庞大""实施周期长""界面丑"。没错,这些都是真的。但你有没有想过一个问题——

为什么这么多世界五百强、这么多大型集团企业,哪怕被 SAP 虐得欲仙欲死,也不愿意换别的系统?

尤其在中国,用友、金蝶做了几十年了,产品也不差。为什么大集团该用 SAP 的还是用 SAP?

我的答案很简单:SAP 太懂财务用户了。

而这套"懂"的核心武器之一,就是 SAP BW(Business Warehouse)的多维数据分析能力。具体来说,SAP 有一整套极其成熟的父子维度(Parent-Child Hierarchy)建模体系,专门用来处理集团企业里最复杂的一件事——组织架构和财务科目分析。


三、集团财务的"终极难题":一张表里藏着 N 棵树

让我用一个场景给你讲清楚。

你是一个集团财务分析师。你手里有一张 Excel 表,列 A 是"公司编码",列 B 是"公司名称",列 C 是"本期收入"。

看起来很简单对吧?三列数据,VLOOKUP 一下就能解决问题。

但实际的情况是这样的:

同一张"公司"维度的表里,有五个层级的数据同时在跑。

  • 深圳总部是第 1 层
  • 华南大区事业部是第 2 层
  • 广东子公司是第 3 层
  • 深圳分公司是第 4 层
  • 南山区营业部是第 5 层

它们全放在同一列。你现在要做两件事:

1. 层级判断:南山区营业部到底是第几层?它的直属上级是谁?它的完整组织路径是什么?

2. 层级汇总:华南大区事业部的收入,等于它下面所有子孙公司的收入之和吗?

这还没完——在真实的 SAP 项目里,同一个维度可能不止一棵树。

什么意思?以"科目"维度为例。同一个科目编码"10010100",在管理口径的组织架构树里,它属于"管理费用-办公费";但在法人报表口径的组织架构树里,它可能属于"期间费用-管理费用-办公费"。

一棵树变成两棵树,甚至三四棵树。而且都是动态的——随着时间推移,组织架构在变,科目结构也在变。

这就是 SAP 的父子维度层级结构——也是我在这两个生产级项目中要解决的核心技术难题。


四、灵魂对比:为什么 Power BI 如此流行,SAP 依然稳坐企业级数据分析的铁王座?

聊到 BI 工具,很多人第一个想到的是 Power BI。微软倾全力推广,学习资源铺天盖地,入门门槛极低,可视化效果惊艳——说它是"大众化的 BI 工具之王"毫不为过。

但如果你把上面那个"同一列不同层级 + 多棵树 + 时间版本"的父子维度场景扔给 Power BI,它会直接懵逼。

为什么?因为 Power BI 的数据模型内核,是一套围绕**星型模型(Star Schema)**设计的引擎。

4.1 Power BI 的"舒适区":每一列是同一个维度层级

在星型模型里,维度表的设计逻辑是:

维度表的设计假设
实际情况(父子维度)
每一行代表一个独立的维度成员
每一行可能是一个父节点,也可能是子节点——它们的身份是关系定义的,不是行定义的
每一列代表一个维度属性
"层级"不是一个固定属性——同一个编码的层级会随着版本变化
维度成员之间的层级关系,通过外键关联不同表来表达(如:地区表 → 国家表 → 城市表)
父子维度的层级关系在同一张表内部,通过 parentid 自引用
一个维度对应一套层级,所有分析沿这一套层级走
一个维度可能有多套层级(管理口径 vs 法人口径),需要动态切换

看到了吗?Power BI 最擅长的是"把不同层级拆分到不同列、不同表"——比如地区一列、城市一列、门店一列,各列之间是平行展开、互不干扰的。这在零售、电商这些"层级结构扁平、稳定"的行业里,完全够用。

但在企业财务领域,维度结构天生就是"不平行"的。

4.2 Power BI 的挣扎:PATH 函数——看起来能解决,实际上治标不治本

Power BI 的 DAX 语言里确实提供了一组父-子函数:PATH()PATHITEM()PATHLENGTH()PATHCONTAINS()

表面上看,它们就是用来处理这种"同一张表内的 id/parentid 层级关系"的。但实际上,这组函数有几个致命短板:

第一,PATH 是扁平字符串,不是真正的树。

PATH 函数返回的是一个用"|"分隔的编码串,比如 "A|B|C|D"。这意味着:树结构被"拍扁"成了字符串,你失去了所有树结构的优势——没有层级索引、没有高效遍历、没有最近公共祖先查询。

你想知道"C"节点有多少个子孙?不好意思,PATH 不会直接告诉你。你得遍历整个表,用 PATHCONTAINS 一个一个判断。1000 个节点的维度,光这一个查询就要扫 1000 次。

第二,PATH 不支持动态多层级版本。

上一节的场景——同一个编码"10010100",在管理口径和法人口径下属于完全不同的路径。Power BI 怎么处理?你只能在 DAX 里写两套完全不同的计算列,或者用极其复杂的 SWITCH 逻辑。这在 Excel 里的财务用户根本不可能自己写出来。

第三,PATH 不支持跨树的分析操作。

"两个节点的最近公共祖先是什么?""当前节点在哪棵树上?""这棵树的根节点有几个?"——这些都是财务分析的日常操作。但在 PATH 的字符串世界里,这些操作要么极其昂贵,要么根本做不了。

**没有一个 DAX 函数能回答这个问题:**"华南大区"下面所有子孙节点(不管多少层),它们的本期收入加总是多少?

不是因为 DAX 不够好——而是因为 Power BI 的数据引擎从底层就不是为"父子维度"这种关系型层级结构设计的。 它擅长的是"每一列是一个独立的、无层级嵌套的维度属性"。

相比之下,SAP BW 里的父子维度(Parent-Child Hierarchy)是一个一等公民——从底层多维引擎到上层查询语言 MDX,全程原生支持。展开节点、层级汇总、祖先路径查询——这些在 SAP 里是基本操作,在 Power BI 里得绕一大圈。

4.3 SAP 贵得离谱,为什么大企业还是买它?

Power BI 一个 Pro 账号一个月才几十块钱。SAP 一个 BW 模块的授权费可能是 Power BI 的几百倍甚至上千倍

但从世界五百强到大型国有企业,它们在财务和供应链上的核心系统,仍然是 SAP。

原因非常直白:

企业级数据分析的真正分水岭,不是可视化好不好看,而是能不能准确处理"多层级、多版本、多口径"的复杂维度结构。

具体来说:

• 财务合并报表:母公司和子公司的交易要抵消、少数股东权益要拆分——这依赖于极其精准的组织架构树。差一个层级节点,整个集团的合并报表就错了。

• 管理口径 vs 法人口径:同一个部门,在管理会计的科目树里是一个"成本中心",在法定报表的科目树里可能被拆分到三个不同的"法人实体"。Power BI 需要你在 ETL 阶段做数据拆分和重建,而 SAP 的父子维度原生就支持"一套数据、多套层级"。

• 时间版本变化:2025 年 6 月之前,深圳分公司属于华南大区;7 月 1 号组织架构调整之后,它划归华东大区了。如果你要出一份跨半年的对比报表,6 月和 7 月的层级路径不同——Power BI 要处理这个,你得在数据加载时给每条打上时间标签然后写复杂的 DAX 过滤。SAP 呢?在 BW 里建维度的时候勾上"时间相关"就行了。

这就是为什么 SAP 配得上一个"贵"字。 它贵在底层数据建模的正确性和完整性,贵在面对真实企业复杂业务时不妥协。而"便宜的工具",往往是用"简化业务假设"来换取低成本的。

Power BI 很好——当你不需要处理这种量级的维度复杂度时,它是绝佳的选择。

但当你面对的是一个几十家子公司、几百个成本中心、每年变两三次组织架构、财务口径还有两三套并行的集团企业时——你需要的能力,Power BI 给不了,SAP 给得了,而现在,我的 Excel-DNA + TreeCollections 方案也给得了。

4.4 一个讽刺的现实:国内很多产品天天喊"取代 Excel",SAP 却默默地给 Excel 做了两个最贵的插件

写到这里,我想顺带吐槽一个现象。

你打开任何一个国内 ToB 软件的产品发布会、融资新闻、公众号推文,不出三句话你一定能看到这些话术——

"彻底取代 Excel!""颠覆传统电子表格!""比 Excel 好用一百倍!"

说真的,这些口号我听了十几年了。从最早的 BI 工具到后来的低代码平台,从数据中台到 AI 报表——每一个都号称自己是"Excel 杀手"。

但结果呢?喊得最响的那几家,要么融完钱就销声匿迹了,要么产品做出来连一个集团级客户的财务月结都撑不过去,要么落地之后用户发现——脱离 Excel 根本没法干活,最后又偷偷加了一个"导出 Excel"的按钮。

而真正的赚钱王者、企业软件收割机 SAP,对 Excel 是什么态度?

人家没有喊过一个字"取代 Excel"。人家做的是:倾尽资源,做出 EPM 和 AO 这两个重量级 Excel 插件,把 SAP BW 的全部能力无缝嵌入到 Excel 里。 两个插件的说明书各有几百页,版本迭代几十年,投入的研发资源不知道能养活多少个国内的"Excel 杀手"创业公司。

SAP 比谁都清楚:你可以让用户不离开 Excel,但你可以让 Excel 离不开你。

财务用户打开 Excel,看到的是熟悉的单元格、熟悉的公式、熟悉的操作习惯。但背后跑的,是 SAP 的多维引擎、父子维度层级、时间版本管理。用户不需要学新工具,不需要迁移工作习惯——所有的能力长在了他们最熟悉的工具上。

这就是 SAP 的底层逻辑:不跟用户的习惯较劲,而是把能力做进用户的习惯里去。

反观国内那些天天喊"取代 Excel"的产品——他们真正想取代的不是 Excel,而是用户十几年积累的工作习惯和业务直觉。这件事,从来就没有成功过。而且我可以断言:未来也不会成功。

因为真正的企业级产品,不是做一个"看起来比 Excel 炫"的工具去跟 Excel 竞争——而是做一个"让 Excel 变得更强"的工具,让用户用了就回不去。

SAP 从来不喊口号。它只是年复一年地把产品做到极致,让你心甘情愿地为它买单——不管它多贵。


五、SAP 自己是怎么解决的?EPM 和 AO——两本几百页的说明书

SAP 当然知道这个需求有多刚,所以他们自己做了两个 Excel 插件:

  • **EPM(Enterprise Performance Management)**:主要做预算、合并、分析报表
  • **AO(Analysis for Office)**:从 SAP BW 里拉数据到 Excel,做多维即席分析

这两个插件的说明书,每一个都有几百页。版本迭代之频繁,功能之丰富,足以说明一个问题:

SAP 比任何人都清楚——财务用户的天堂,不是花里胡哨的可视化大屏,而是一个能跟 Excel 深度融合、能处理复杂维度层级的数据工具。

为什么是 Excel?因为有调研数据显示,全球超过 70% 的财务专业人员以 Excel 为核心工作工具。SAP 不会蠢到让财务用户离开 Excel,它选择的是:把能力做进 Excel,而不是把用户拉出 Excel。

这也正是我在该项目中走的路线——复刻并重新打造一套比 EPM 和 AO 更好用、更顺手的 Excel 插件。


六、我的真实项目:从 SAP BPC 里拆出一套"维度树引擎"

现在来点实在的。让我告诉你我在那个大型制造集团的 SAP 项目里到底做了什么。

6.1 财务报表工作台插件:为几十个财务人员打造的完整报表系统

这是一个 VSTO + WPF 的 Excel 插件,功能深度远超你的想象:

  • 从 SAP BPC 的 SOAP/WCF 接口,用 JSON 拉取所有维度元数据
  • 解析出每个维度的多套层级结构(HIR + PARENTH1~PARENTHn)
  • 将维度成员数据加上时间版本(DATEFROM/DATETO),构建带时间相关性的树结构
  • 在 WPF TreeView 中展示组织架构树、股权架构树,支持关键字搜索和多维筛选
  • 用户选完维度成员后,自动生成 MDX 或 EPM JSON 查询,写回 Excel
  • 支持工作薄的保存、快照、提交、OA 审核等完整工作流

插件有 8 个 Ribbon 功能区分组、几十个功能按钮。最大的 ViewModel 文件足足 507KB,可见其业务复杂度。

你看着我这个项目可能会想,"一个 Excel 插件为什么这么大?功能这么多?"

因为它不是在处理"一个简单的报表生成",它是在处理——

  • 同一家公司,上半年和下半年属于不同的组织架构路径
  • 同一个股权单体,可能同时挂在两个不同的父节点下面
  • 同一棵组织树,集团总部分析师能看到全部节点,而分公司审核员只能看到自己的节点

这些全部都是真实的 SAP 项目需求。不是功能堆砌——是真实的业务压力逼迫出来的复杂度。

6.2 多维即席分析插件:一个纯 SQL 思维的"透视查询引擎"

第二个项目更聚焦——这是一套专门用来做 SAP BW 即席分析的 Excel 插件。

核心工作流是:选择模型 → 选择维度 → 把维度成员拖放到行轴/列轴/页轴 → 系统自动构建查询 → 返回数据填入 Excel。

听起来像一个"BI 工具"对吧?但它的精髓不在这个流程本身,而在对维度成员的处理上。

在这个插件里:

  • 同一列数据中,有父子关系的成员通过**层级缩进(Indent Level)**来区分层级
  • 用户可以双击某个维度成员,自动展开子节点 / 全部子孙 / 叶子节点
  • 支持维度成员在不同轴之间的交换(把行轴的某几个成员挪到列轴)
  • 支持维度成员的笛卡尔积组合(比如行轴有"公司"和"科目"两个维度,自动生成所有交叉组合)

最核心的是——所有这些操作都依赖于一个预构建好、常驻内存的维度树结构


七、技术破局点:为什么"TreeCollections + Excel-DNA 内存对象"是这个场景的最优解?

好,关键的来了。

在上面两个 SAP 项目中,有一个技术组件贯穿始终——TreeCollections。

它是一个开源的 .NET 树集合库。我在两个生产级项目中,用它来构建和查询整个 SAP BPC 的所有维度树结构。

现在,我把这个库完整内嵌到了 Excel-DNA Skill 的新蓝图 wps-udf-tree-collections 里,并且做了两件非常"透彻"的事:

7.1 不是简单地"把 TreeCollections 封装成几个 UDF 函数"

我的蓝图做的是一个完整的 BI 分析模型——维度表 + 事实表 + 层级汇总,全部在 Excel 单元格里完成。

具体来说:

=DIM_BUILD( 维度表区域,"id", "parentid", "name", "组织维度")

这一条公式,把你工作表中写好的维度表区域(包含 id 和 parentid 两列),一次性构建成一棵完整的维度树快照,存进 Excel-DNA 的内存句柄。

然后,你可以用下面这些函数,基于这个句柄做各种查询:

=DIM_STATUS( 句柄 )                        → 查看树的节点数、根数、叶子数=DIM_FIND( 句柄,"华南", 20 )              → 关键字搜索维度成员=DIM_PATH_NAMES( 句柄, "SZ001" )           → 返回完整层级路径=DIM_LEVEL( 句柄, "SZ001" )                → 返回节点的层级深度=DIM_PARENT( 句柄, "SZ001" )               → 返回父节点编码=DIM_CHILDREN( 句柄, "SZ001" )             → 返回直属子节点列表=DIM_DESCENDANTS( 句柄, "SZ001" )          → 返回全部子孙节点列表=DIM_LEAVES( 句柄, "SZ001" )               → 返回叶子节点列表=DIM_SIBLINGS( 句柄, "SZ001" )             → 返回兄弟节点列表=DIM_IS_ANCESTOR( 句柄, "HQ", "SZ001" )    → 判断 HQ 是否为 SZ001 的祖先=DIM_LCA( 句柄, "SZ001", "GZ001" )         → 返回两个节点的最近公共祖先=DIM_SCOPE_IDS( 句柄, "HQ", TRUE, TRUE, FALSE, "," )                                           → 返回节点作用域内的所有编码=DIM_ATTR( 句柄, "SZ001", "leader")       → 读取节点属性

但维度查询只是第一步。真正的王炸在后面——事实聚合。

7.2 FACT_AGG:让 Excel 具备 BI 工具的层级汇总能力

在 BI 分析里,我们不光要知道"这个节点有几层、它的上级是谁",更要知道"这个节点 + 它的所有子孙节点,收入合起来是多少。"

这就是 FACT_AGG 做的事:

=FACT_BUILD( 维度句柄, 事实表区域,"id", "month='2026-07'", "", "总部")

先根据维度句柄和事实表,构建一个事实缓存。你可以在 build 阶段就加上筛选条件——比如只保留 7 月的数据、只保留总部区域的记录。

然后用 FACT_AGG 做汇总:

=FACT_AGG( 事实句柄,"华南大区", "amount", "sum", TRUE, TRUE, FALSE, "", "")

这一条公式的意思是:取"华南大区"这个节点(includeSelf=TRUE),加上它下面所有子孙节点(includeDescendants=TRUE),把它们的 amount 字段汇总(sum)。

你还可以追加运行时筛选条件。 比如上面用的是"全量句柄",后面想切到某一个月份或某一个场景(如 actual vs budget),直接在 FACT_AGG 里传 factWhere="month='2026-07' and category='actual'" 就行。

更进阶的用法: 如果某个月份或某个区域会被反复计算,推荐单独 build 一个预过滤句柄:

=FACT_BUILD( 维度句柄, 事实表,"id", "month='2026-07'", "", "总部")

然后后面所有 FACT_AGG 都基于这个预过滤句柄——一次构建,多次复用。这就是内存对象的魅力。

7.3 性能突破的内核:一次 build,无限复用

看到这里,有些懂行的朋友会问:"递归遍历一棵树的子孙节点去做汇总,难道不慢吗?Excel 里每算一次公式都要遍历一遍整棵树,性能能看吗?"

这就是 Excel-DNA 内存对象特性的精髓所在:

1. DIM_BUILD 把维度表区域解析、构建成一棵完整的树结构——这是一次性的高开销操作

2. 构建完成后,整棵树作为一个对象常驻在 Excel-DNA 的内存句柄里

3. 之后所有的 DIM_* 查询和 FACT_AGG 汇总,都是直接操作内存中的同一个对象,不需要重新解析、重新建树

"一次性付出 O(n) 的构建成本,换来后续每一次查询 O(log n) 甚至 O(1) 的响应速度。"

在 SAP 的 EPM 和 AO 插件里,同样的操作依赖的是 SAP BPC 底层引擎的服务器端计算——每次展开一个节点、每次汇总一笔金额,都要走一次网络请求,等几十毫秒甚至几百毫秒。

而在 Excel-DNA 的方案下,所有这些计算都在本地内存完成。

对比一下:

操作
SAP 原生方案(EPM/AO)
Excel-DNA + TreeCollections
打开报表、加载维度树
从 SAP 服务器加载,几十秒到几分钟
一次 DIM_BUILD,几毫秒到几秒
展开一个维度节点
发请求到服务器,等返回
直接读内存,毫秒级
层级汇总
服务器计算 + 网络传输
本地内存遍历,毫秒级
筛选条件切换
重新发请求
运行时过滤,毫秒级
离线使用
不可能
完全支持

不需要服务器,不需要网络,不需要数据库。所有计算在你的笔记本电脑上完成,速度比请求远程服务器快几个数量级。


八、不是 Demo,是工业级的"行业通用解法"

到这里,我想请你停下来想一想:

你见过多少开源项目的示例,是用虚构的、三行数据的"Hello World"来演示的?

我的这个蓝图不是。

它是我在大型制造集团的 SAP 项目中用了真实企业数据、真实父子维度层级结构、真实财务报表分析场景反复验证过的模式。然后我把核心逻辑抽离出来——去掉项目特定的数据库连接、去掉 SAP BPC 的私有接口——变成了一套通用的、任何有父子维度分析需求的人都能直接用的 UDF 函数体系。

这套方案能解决的具体问题包括但不限于:

  • 组织架构树:总部 → 大区 → 子公司 → 分公司 → 营业部
  • 财务科目树:所有者权益 → 净利润 → 收入 → 主营收入 → 产品线收入
  • 成本中心树:集团成本中心 → 工厂成本中心 → 车间成本中心 → 班组
  • 物料 BOM 树:成品 → 半成品 → 零部件 → 原材料
  • 任何需要"同一列数据中,不同行代表不同层级,且层级关系通过 id/parentid 定义"的场景

而且所有这些,都不需要用户在 Excel 外安装任何数据库、不需要学习 SQL、不需要打开 Power BI。

用户只需要在 Excel 单元格里输入 =DIM_BUILD(...) ,然后像用 VLOOKUP 一样去用这十几个维度函数和事实函数。


九、从 MDX 到 Excel-DNA:一次轻量化的"降维打击"

做 SAP BW 开发的人都知道——想在 BW 里玩转父子维度查询,你得会写 MDX。

MDX 是什么?它是 SAP BW 的查询语言,语法长这样:

SELECT{[Measures].[AMOUNT]}ONCOLUMNS,{DESCENDANTS([Z_ENTITY].[HIERARCHY1].&[E1001])}ONROWSFROM[BPC_MODEL/ZBUDGET]WHERE([Z_TIME].[2026.07],[Z_SCOPE].[ACTUAL])

MDX 很强大,但它有几个让人头疼的问题:

1. 学习曲线陡峭:不是 SQL,不是 DAX,是一套独有的多维度查询语法

2. 调试困难:报错了不知道是哪一行的括号少了还是层级路径写错了

3. 和 Excel 脱节:你得把 MDX 写在一个配置表里,或者在代码里拼字符串,用户完全看不到这个查询在做什么

4. 依赖服务器:没有 SAP BW 服务器,MDX 跑不了

在我之前的 SAP 项目中,MDX 是实现维度层级查询的核心手段。它确实能干活——跨行成员查询、层级展开、成员属性获取——这些全都能用 MDX 表达出来。

但现在,我换了一种完全不同的实现方式:

能力
SAP BW MDX 实现
Excel-DNA + TreeCollections 实现
节点层级
[Dim].Levels(...)DIM_LEVEL( 句柄, "SZ001" )
子孙节点
DESCENDANTS( [Dim].&[ID] )DIM_DESCENDANTS( 句柄, "SZ001" )
祖先节点
ANCESTOR( [Dim].&[ID] )DIM_IS_ANCESTOR( 句柄, "HQ", "SZ001" )
成员属性
[Dim].Properties(...)DIM_ATTR( 句柄, "SZ001", "leader" )
层级汇总
AGGREGATE( ... )FACT_AGG( 句柄, "SZ001", "amount", "sum" )
运行时依赖
SAP BW 服务器
仅 Excel + 本地 .NET 运行时

同样的效果,零服务器依赖,零网络延迟,零 MDX 学习成本。

这就是我说的"降维打击"——不是技术上更高端,而是从"企业级重型武器"变成了"人人都能上手的 Excel 函数"


十、文章写到这里,我给你画一张全景图

让我把所有信息串起来,给你一个完整的视角:

                        ┌─────────────────────────────┐                        │   我的 Skill 蓝图矩阵          │                        │                             │                        │  基础蓝图(7套)               │                        │  ├─ wps-udf-only             │                        │  ├─ wps-ribbon-ctp-webview   │                        │  ├─ wps-workbook-automation  │                        │  └─ ...                      │                        │                             │                        │  NEW! 专项蓝图:              │                        │  ├─ wps-udf-tree-collections │ ← 本文主角                        │  │   ├─ DIM_BUILD            │                        │  │   ├─ DIM_*(13个函数)      │                        │  │   ├─ FACT_BUILD           │                        │  │   ├─ FACT_AGG             │                        │  │   ├─ FACT_TABLE           │                        │  │   └─ TreeCollections 内嵌  │                        │  │                           │                        │  └─ 组合使用                  │                        │      wps-ribbon-ctp-webview   │                        │      + wps-udf-tree-collections                        │      + wps-udf-live-cache     │                        │      = 全功能 BI 插件!        │                        └─────────────┬───────────────┘                                      │                    ┌─────────────────┴─────────────────┐                    │                                   │            ┌───────▼──────────────┐          ┌─────────────▼──────────────┐            │  财务报表工作台插件     │          │  多维即席分析插件            │            │  (SAP 报表分析)        │          │  (SAP 即席查询)             │            │                       │          │                            │            │  大型制造集团生产级     │          │  大型制造集团生产级           │            │  VSTO+WPF           │          │  VSTO+WinForm             │            │  507KB ViewModel      │          │  TreeCollections 核心       │            │  8组 Ribbon           │          │  维度树展开/收缩/交换         │            │  TreeCollections      │          │  父子维度成员管理            │            │  财务分析工作流        │          │  MDX 查询构造               │            │  OA 审批集成          │          │  即席报表生成               │            └──────────────────┘          └────────────────────────┘                    │                                   │                    └──────────────┬────────────────────┘                                   │                          ┌────────▼────────┐                          │  共同的灵魂     │                          │                 │                          │  TreeCollections                          │  父子维度树引擎  │                          │                 │                          │  提取共性 →     │                          │  放回 Skill     │                          │  赋能更多人     │                          └─────────────────┘

十一、我不只是在"秀代码",我是在"秀能力边界"

写到这里,我想回到一个更根本的话题。

我做这些 Skill、写这些推文,终极目的是什么?

不是炫技,不是卖课,不是割韭菜。

我想让看到这篇文章的你,认识到两件事:

第一件:我搞定了"从理论到落地"的全链路

Excel-DNA 不是我发明的,TreeCollections 不是我写的,SAP 也不是我开发的。

但是——

把 TreeCollections 内嵌进 Excel-DNA 的自定义函数里,让用户在 Excel 单元格里用 =DIM_BUILD(...) 就能完成父子维度的全部分析——这件事,是我做的。

在两个真实的生产级 SAP 项目里,用这套技术方案替代了 EPM 和 AO 几百页说明书的功能——这件事,是我做的。

把自己的实战经验提炼出来,做成一个可以一键生成的标准 Skill 蓝图,让 AI 帮你把项目脚手架搭好——这件事,也是我做的。

这不是"我懂某个技术"。这是"我从需求 → 方案设计 → 编码实现 → 生产验证 → 经验提炼 → 工具封装"的完整闭环。

第二件:在数据领域,我能做的事可能远超你的想象

如果你有类似的需求:

  • 你在做财务分析,想用 Excel 做父子维度的层级汇总,但数据量太大 VBA 跑不动
  • 你有一个组织架构树或科目结构树,经常需要按层级展开、汇总、筛选,但找不到顺手的工具
  • 你想在 Excel 里做一个数据看板,既有复杂公式计算,又有漂亮的交互界面,还能嵌网页
  • 你们公司有 SAP 系统,但现有的报表工具太难用,想定制一套更顺手的 Excel 插件
  • 你有一个"Excel 里做 BI 分析"的想法,但不知道技术上能不能实现

这些,我都能做。而且不仅仅是"能做"——我有生产级项目验证过的完整方案。

我不只是一个"Excel-DNA Skill 的制作者"。我是一个在数据领域——特别是 Excel 深度开发、BI 报表分析、企业级 Office 工具定制——有十几年经验的专业玩家。

  • VBA 宏开发
  • Excel/WPS 插件开发(VSTO / Excel-DNA)
  • SAP BPC / SAP BW 报表分析
  • 父子维度层级建模
  • MDX 查询构造
  • WPF 桌面界面开发
  • WebView2 内嵌网页

这些是我打了十几年才集齐的"七龙珠"。而你现在看到的每一套 Skill,都是一颗龙珠的具象化。


十二、欢迎来聊

文章到这里就写完了。

如果你耐心读到了这里,我想告诉你的是:

这篇推文不是结束,而是开始。

如果你正在面临类似的难题——父子维度分析、层级报表汇总、Excel 插件开发、SAP 报表定制——你可以直接来找我聊。

一个电话,一条微信,说说你的情况。聊完你至少会知道:

  • 你的问题能不能用 Excel-DNA 解决
  • 能解决的话,大概是个什么方案
  • 不能解决的话,有没有别的路可以走

能做的直接做,不能做的直说,绝不兜圈子。


公众号:Excel催化剂 | 微信:190262897

承接:Excel/WPS 插件定制开发 · 数据报表解决方案 · AI 编程培训 · SAP BW/BPC 报表优化

如果你正在做 SAP BW 报表、财务分析工具、或有任何 Excel 深度开发需求——欢迎加好友,我们聊聊。

想体验全套 Skill(含本文的 wps-udf-tree-collections 蓝图)?加我微信进群自助申请即可。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-09 12:59:39 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/843087.html
  2. 运行时间 : 0.298856s [ 吞吐率:3.35req/s ] 内存消耗:4,830.87kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1c8a28e59163c0a1689d0644c241913a
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001125s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001664s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000770s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000691s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001364s ]
  6. SELECT * FROM `set` [ RunTime:0.000622s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001541s ]
  8. SELECT * FROM `article` WHERE `id` = 843087 LIMIT 1 [ RunTime:0.010761s ]
  9. UPDATE `article` SET `lasttime` = 1783573179 WHERE `id` = 843087 [ RunTime:0.032738s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000893s ]
  11. SELECT * FROM `article` WHERE `id` < 843087 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001217s ]
  12. SELECT * FROM `article` WHERE `id` > 843087 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000978s ]
  13. SELECT * FROM `article` WHERE `id` < 843087 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.011226s ]
  14. SELECT * FROM `article` WHERE `id` < 843087 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.072724s ]
  15. SELECT * FROM `article` WHERE `id` < 843087 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002651s ]
0.302844s