
当我们在Power Query中处理表或者查询的时候,对数据源有两种处理方式:复制 和 引用。仅解释它们的字面意思很简单,但是要理解它们的具体行为就需要一些深入的思考。当你明白它们之间的区别时候,你才能正确的使用它们。这里我们将介绍“引用” 是如何工作,以及“复制”又是如何工作。
复制
当你需要对整个查询进行复制,包括对它的一些处理步骤,那么“复制”就是你需要的功能。通过下面这个例子我们看下它的工作方式,假设我们要从某网页获取数据,以最后得到一些热卖电影的信息。
在Power Query中,我们选择从源,从web。输入对应的url等信息:

对原始获取的表单,我们需要做一些转换。例如,从最后一列中移除额外的字符。

另外,我们还会做一些其他的转换步骤等,这样最后,对这个查询总共会包含多个转换。

在这些处理完之后,我们可以知道这只是其中的前100个电影的信息,因为这个网页并没有包含所有的电影信息。要得到所有的信息,那么需要翻页到第二页,也就是另外一个URL的页面,但是页面的结构是相同的。

现在,你需要怎么做?把之前的转换步骤全部重新再做一遍吗?为了简单话,我们这里就取两个页面为例子。对应这样的需求,“复制”就是你需要的功能。
对现有的数据源,进行复制操作:

当你复制了这个查询,你会得到一个和原先完全一致的数据源,包含了其中的所有转换步骤操作。这样的两个数据源是完全一样的。

创建好复制后,我们就可以回到转换的第一个步骤,修改对应的URL

复制功能,保留了对原始数据的全部转换步骤,然后我们在新的数据源修改信息,并不会对原先的数据源有任何影响,两个数据源各自是保持独立的!
当你想保留原数据的所有转换步骤,并且做另外的一些配置,那复制功能将是理想的功能选择
引用
另外一种方式是“引用”。和刚才介绍的复制功能对比的最大区别是:当使用引用功能的时候,新生成的查询就只有个转换步骤,就是连接到原先的查询。它不会包含对最初数据源的一系列转换步骤。我们来看下。接着之前的案例说明,我们的目的是合并page1和page2的数据,得到一个合并的结果。但是也说了,我们并不希望对现有的转换步骤做修改,因为我们希望把它们作为数据源,用于其他的操作。
现在我们对page1点击鼠标右键,然后选择引用:

新建的查询会对原先的page1数据做一个复制的操作,但是在转换步骤中只有一个项目:

这个步骤就是连接到之前的数据源。这就意味着,如果我们对原始的数据查询做任何的操作改变,这个新生成的查询都会收到影响。
接下来我们使用这个查询把他和page2的数据合并起来:

数据的结果就是包含了两个页面的数据:

对于引用:当你需要对一个查询处理后,再进行不同分支的转换操作的时候,引用是你需要的功能。例如一个分支处理某些操作,另外一个分支处理另外一些操作,而两个分支的基础数据是公用的。
在合并操作完成以后,建议对数据源page1和page2,取消勾选“启用加载”,这样可以节省系统资源的消耗。

网友评论