Power Query通过转换表格熟悉函数用法

Power Query通过转换表格熟悉函数用法

编码文章call10242025-03-23 17:24:3418A+A-

看这样一个题目:将上表转换成下表

咋一看,还以为就是一个表格转置的问题,仔细看看,才发现原来中间还是有些曲折:

  • 要把项目列展开到日期
  • 要把日期变成列

在Power Query中解决问题的方法有很多种,我们今天就从表格变换的角度来思考一下这个问题,针对这个问题,应该分三步走:

  • 第一步:数据整理,现有的数据格式逆透视变成一维数据格式
  • 第二步:分出单表,每个日期一个表
  • 第三步:合并这些表格

第一步:数据整理

数据整理的过程,我们就会发现很多问题,当我们完成逆透视之后,就会发现,这个表格中同一日期下对应着12个项目1,将来我们合并表格时没有准确的索引,所以我们需要按照日期分组添加一个索引:

然后我们合并属性与索引作为我们合并表格的键值:

到这一步我们的数据整理就做好了。

第二步:拆分表格

这一步的方法有多,最常用的就是Table.Group,根据日期分组,得到31个表格,当然我们也可以换种思路,我们用筛选的方法也可以达成同样的效果,用Table.SelectRows来获得每个日期对应的表格,当然要用List.Transforn做个循环,拆分出每个表格。

我们在拆分的同时删除了日期列,并且用日期给数值列重命名。

let

T=Table.Buffer(S),

源 = List.Transform(

List.Distinct(T[日期]),

(x)=> Table.RenameColumns(

Table.RemoveColumns(

Table.SelectRows(T, each ([日期] = x)),

{"日期"}),

{{"值", Text.From(x)}}))

in

  1. S:是我们整理好的数据源。
  2. T=Table.Buffer(S):把数据源表缓存,因为我们要重复使用这个表。
  3. List.Transform的第一参数是数据源中日期列去重复之后的日期列表,第二参数就是用Table.RenameColumns、 Table.RemoveColumns、Table.SelectRows函数组合,筛选表格、删除列、重命名列。

第三步:合并表格

整体合并之前我么要做个实验,为了确保数据不遗漏,我们取了两个日期的表格,10月2日266行,10月31日418行,如果他们的表键值完全相同,合并结果应该是418行。

Table.NestedJoin就有点类似Excel中的VLOOKUP函数,我们根据a列的值来匹配数据,JoinKind.FullOuter合并类型是取两个表的所有行,这样就确保了数据的完整性。

我们展开之后得到的是418行:

有了这个测试结果,我们就可以开始完成表格合并了:

我们选用List.Accumulate函数来做最终的表格合并

  • 第一参数:就是我们拆分好的表格列表
  • 第二参数:第一个表,2019/10/1日期对应的表
  • 第三参数:用Table.NestedJoin函数合并x,y 表

这个是把拆分表的公式都带进来的一个公式,看起来有点乱,后面几步就是为了拆分列,把之前添加的索引去掉。重新排列的结果如下:

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4