← 返回文章列表

分析复杂的Power Query实现的Excel文件的逻辑

公司的财务顾问使用Power Query技术制作了几个非常复杂的Excel文件,用于业务数据分析。业务人员知道如何使用这些Excel,可无法读懂其中的逻辑细节,出现问题时也无法解决。考虑到未来这些逻辑都需要我做到系统中,那么这些其实就是第一手的需求资料,于是我决定,主动帮助业务人员分析这些Excel的逻辑。

一、学习

首先了解并学习Power Query是什么,能做什么,有什么特性和限制,并做一些实验和demo来加深理解。

我理解到,Power Query其实是一种表处理语言,从一张表计算出另一张表。非技术人员通过Excel软件中的图形化界面来编排计算过程,但背后其实就是代码(M语言代码)。

二、提取元素和关系

将每个Excel中的主要元素逐个提取出来,包括:

这些就是要分析的问题对象。我将它们用不同的图形表示出来,画在一张PPT上。

然后分析它们之间的关系,包括:

将这些关系用连线或箭头表示出来,同样画在PPT上。

整理PPT中的元素和关系,就得到了整体结构图。

工作表的包含关系 查询的分类关系 查询的输入、输出关系 数据模型的关系

三、理解查询代码

整体上的计算过程是:

  1. 输入:从表格或Excel文件读取数据。
  2. 计算:Power Query执行计算。
  3. 输出:将计算结果输出到表格。

那么接下来要重点分析各Power Query查询的计算过程。

首先将每个查询的代码都提取出来,逐个放到文本文件中。然后逐个阅读这些代码文件,尝试理解,并写注释。

这个过程的主要困难在于,代码是最末端、最具体的执行步骤。一个宏观上的意图,可能会表现为多条代码。限于表处理语言的机制(只能表算表),计算过程的表达形式跟我们常用的编程语言很不一样,很简单的一个操作,Power Query经常不得不写得很绕、很晦涩。此外,步骤都是图形化编排出来的,没有有意义的命名。所以,基本上跟读反编译代码差不多,主要靠推理和猜测。这里我采用自底向上的思路,先用自然语言描述出每一个步骤做了什么,再联系上下文猜测它的宏观意图是什么,最后跟业务人员同步信息确认理解是否正确。

我对每个查询都进行了仔细分析,阅读并注释了每一行代码,画出了数据流转关系图,写出了对宏观意图的理解,写出了对主要计算过程的理解,写出了对计算结果的描述(形式和内容)。

查询的分析结果

四、报告与讲解

我将分析出来的所有成果,写成了一个报告文档。文档先总述Power Query的基础知识、各个Excel文件之间的关系,然后逐个Excel详细描述分析成果,包括Excel文件内的各结构图、每个查询的分析、每个数据透视表的分析等。

我将报告文档提交给了领导和相关业务同事,然后在领导的要求下,给领导和同事现场清楚地讲解了整个逻辑。

报告文档

五、价值

后来的事实证明,我的工作是非常有价值的。

我清楚地理解了这里面的每一个细节,成为了最了解这一块业务的人之一(甚至某些方面还要超过业务人员),能参与进跟财务顾问的讨论,能在后续上系统时帮助产品经理纠正理解上的不足和偏差,能在开发时有更高的效率。