表哥的Access入门:以Excel视角快速学习数据库开发(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 Excel最后的演出

在通常情况下,人们一旦习惯了使用某种工具,就会试图用这种工具解决尽可能多的问题,而不太愿意花一些时间去学习一种全新的、更适用的工具。我们经常看到,一些Excel熟练用户用Excel做一些原本不应该它做的事情。例如,用Excel绘制工厂布局图,用Excel制作手工编织图样,等等。

小张也不例外,他觉得,如果Excel能够解决他目前关于小饭馆的数据管理与分析问题,何必花时间和精力去学习一种全新的工具呢?我觉得他说的也有道理,那么让我们先试试Excel的解决方案,用事实说服他吧!

我们在使用Excel对小饭馆的客户订单原始数据进行了基本的规范化处理后,最终形成了4个不同的表,每个表都存储于单独的Excel工作表中;为了将来使用(或引用)方便,我们给每个表都取了规范化的名字,如图3-1所示。

当然,你完全可以随心所欲地给表命名,但规范化的表名称会让你的数据更易于管理和引用,我们的做法是在表名称前加一个表编号作为前缀。这里,我们在每个表名称前加一个字母“T”(T代表Table)。这4个表的名称及内容分别如下。

· T1订单编号:该表主要用于记录“订单编号”,以及每个订单编号所对应的“客户姓名”“客户地址”“联系电话”“要求送餐时间”,还有表示订单是否履行完毕的“备注”。

· T2订单详情:该表主要用于记录在每一个“订单编号”下,客户的“所定菜品”及其“份数”。这里,一个订单编号对应着多种菜品,每一种菜品占据表中的一行。在Excel中,我们可以使用VLOOKUP()函数,在该表中的“订单编号”列与“T1订单编号”表中的“订单编号”列之间建立关联关系。

img

图3-1

· T3菜品价格:该表主要用于记录“菜品”和对应的“单价”。在Excel中,我们可以使用VLOOKUP()函数,在该表中的“菜品”列与“T2订单详情”表中的“所定菜品”列之间建立关联关系。

· T4原料清单:该表包括每一种“菜品”的“原料”,以及制作单位菜品(一份)所需各种原材料的“数量”和“单位”。在该表中,一种菜品可能对应着多种原材料。

需要注意的是,虽然“T4原料清单”表中的“菜品”列与“T2订单详情”表中的“所定菜品”列之间存在关联关系,似乎可以使用Excel中的VLOOKUP()函数将两个表中的对应内容整合到一个表中,但是由于VLOOKUP()函数在功能上的限制,VLOOKUP()函数难以解决这两个表之间存在的“一对多”(一个菜品对应多种原材料)问题。正是“一对多”问题,迫使我们最终不得不采用Access方案(这只是原因之一,还有很多其他原因,随着本书内容的推进,你会了解更多)。

至此,我们完成了小饭馆数据的规范化处理工作,接下来的任务是基于以上4个表,以Excel为工具,将它们重新“组装”成便于数据管理和分析的“理想中的表”。

这里,请允许我先做一下“剧透”:基于这4个表,Excel方案只能完成小张所期望的理想状态下的数据管理任务的一半,而任务的另一半,实在不太适合使用Excel完成,因此引出了本书的主要话题:Access数据库(本章暂且不表)。

下面,我们先看看Excel是如何完成这“一半”工作的。在介绍Excel数据处理的详细步骤之前,我们先来看看用Excel所能完成任务的最终形式,如图3-2所示。

在图3-2中,我们已经用VLOOKUP()函数将工作表“T2订单详情”、工作表“T1订单编号”和工作表“T3菜品价格”中的数据“组装”到一起了,“组装”的基本逻辑如下。

img

图3-2

以工作表“T2订单详情”为基础,使用Excel中的VLOOKUP()函数,分别进行如下操作。

(1)将“订单编号”作为查找关键字,从工作表“T1订单编号”中提取出“客户姓名”“客户地址”“联系电话”“要求送餐时间”“备注”。

(2)将“所定菜品”作为查找关键字,从工作表“T3菜品价格”中提取出每个订单编号下所定菜品的“单价”。

就这样,我们通过对小饭馆客户订单原始数据进行初步规范化处理,借助Excel中的VLOOKUP()函数,可以非常方便地对小饭馆的一些基本数据进行汇总分析了。但是,由于Excel功能上的局限性,目前这个Excel方案所能实现的最终表并不是我们“理想中的表”,它只能对小饭馆中每种菜品的销售数量和销售额进行汇总分析,但对小饭馆每天的菜品原材料消耗量与需求量等更重要数据的分析无能为力。