最近几个月啃了不少PowerQuery教程,但是都没提到PowerQuery加载包含PowerQuery加载结果的Excel文件,更遑论细节了。
经过测试,对这个应用场景的细节有了一些了解。
结论是:
包含加载到表的PowerQuery查询结果的Excel文件能作为新查询的源引入,但是如果只是作为连接或加载到数据源,则不能作为源引入到新的查询中。
xlsx和xls两种Excel文件格式:在加载速度上,xlsx更快;在使用便利性上,也是xlsx胜出,因为xls文件作为源引入新查询时,无法准确显示查询名,容易引起迷惑。
过程记录如下:
一、包含PowerQuery的文件如果是xlsx格式
这是最新的Excel文件格式。文件体积比xls这种老格式小得多,处理速度也快的多,而且用PowerQuery加载它,有新的特性。
(一)加载时只创建了连接的PowerQuery结果不能被加载。
如【图1】,这个Excel文件有五个查询:
新建一个文件,新建一个查询,引入这个Excel文件,查询编辑窗口显示如【图2】:
可以看到五个查询没有一个会显示出来。导航器只显示了有两个数据源可以引入,一个是“表1”,一个是“人员管理”列表。原因在于,PowerQuery能够将Excel中的Sheet和Table作为数据源引入,在本例中,“表1”所在的Sheet名称为“人员管理列表”,所以,我们可以将它们同时作为数据源引入。本例中,这两个数据源是一模一样的,所以,任选一就好。【注意两个源的图标差异】
(二)加载到表的PowerQuery能被加载
如【图3】,除了“表1”和“人员管理列表”,另外的“系统”是Excel文件中的PowerQuery查询名,“Sheet1”是名为“系统”的查询结果加载的表。所以两个的结果其实也是一样的,任选一即可。
(三)加载到数据模型的PowerQuery查询不能被加载。
截图略。
二、包含PowerQuery的文件如果是xls格式
xls是比较老的Excel文件格式,一不留神就会把Excel文件保存成这种格式。
(一)加载速度比xlsx格式明显慢
我测试的这个文件不到4M的体积,感觉到很明显的加载耗时差异。
(二)加载时只创建了连接的PowerQuery结果不能被加载。
五个查询都不会显示出来,唯一显示出来的是该Excel文件中的一个包含数据的Sheet。
(三)加载到表的PowerQuery能被加载,如【图4】
Sheet1即为加载到表的PowerQuery查询结果,可以看到正常显示。
注意它下面的Sheet1$ExternalData_1,我初步验证,其结果是和Sheet1一模一样的。但是这个奇怪的家伙哪里来的呢?凡是把PowerQuery查询结果加载到表,在新查询里添加这个文件时,都会出现这个包含“$ExternalData”的家伙。但是,如果我打开了那个要添加到新查询的Excel文件,会发生什么?
结果见【图5】:
可以看到,那个包含“$ExternalData”的奇怪家伙不见了。关闭Excel文件,则又出来了。
所以,以后我们通过Excel文件创建新查询时,如果见到“$ExternalData”这样的,大可不必理会。其实它不过是Excel文件中的查询名而已,只是xls格式的Excel文件被作为查询源引入时,PowerQuery不能识别而已(也许不是xls的错?)
(四)加载到数据模型的PowerQuery查询不能被加载。
截图略。