乐于分享
好东西不私藏

EXCEL|Power Query之合并统计数据

EXCEL|Power Query之合并统计数据

我们之前讲了拆解信息,今天咱们来看下,如何合并信息。案例如下。如何由左表通过Power Query的操作变成右表的格式。
1)左表先放进查询编辑器,然后使用功能区的插入列-条件列,操作如下。如下图备注,这一操作的目的是把户主单独拎出来自成一列,能清楚识别出户主是下面进行分组依据的关键。还有就是记得不满足条件的填充为null.原因也在下图中说明了。这个如果有点晕,可以温习下昨天的内容。毕竟我也是踩了坑的。
2)结果如下图所示。然后应用功能区的向下填充,将所有null替换成对应的户主。
3)效果如下图所示。然后用分组依据增加一个新列家庭明细。
4)如下图,就生成了「户主 + 家庭明细」两列。(家庭明细是嵌套子表,包含同户所有成员。
5)添加自定义列。这一步的目的就是把家庭成员综合显示出来。在这一步的难点就是公式的输入。受限于我的电脑是旧版的2016,所以没有办法直接聚合文本,所以就只能使用公式。这个公式也只能先靠记忆。

我们下面来解析下这个公式:Text.Combine(Table.Column([家庭明细], “成员姓名”), “,”)

这个公式一共 3 层,一层套一层:

第一层:[家庭明细]

意思:当前这一行里,那个嵌套的小表格。分组后得到的列叫 家庭明细;每一行都是一个小表格(装着这一户的所有人)。

第二层:Table.Column([家庭明细], "成员姓名")

意思:从这个小表格里,把「成员姓名」这一列单独拿出来。Table.Column(表格, 列名)= 取表格里的某一列;结果是一个列表

{“宋太均”, “刘方明”, “宋俊兴”, “陈庆州”}

第三层:Text.Combine(列表, ",")

意思:把上面那一列姓名,用逗号连起来,变成一段文字。输入:{"宋太均","刘方明","宋俊兴","陈庆州"},输出:"宋太均,刘方明,宋俊兴,陈庆州"。

整句连起来翻译(大白话)

Text.Combine(Table.Column([家庭明细], “成员姓名”), “,”)

翻译成人话就是:从当前这一户的小表格里,取出成员姓名这一列,然后用逗号把它们全部拼成一串文字。

最关键的一句话总结

Table.Column( ) 负责取列;Text.Combine( ) 负责拼接。

6)效果如下图所示。然后我们再用添加自定义列的方法,计算出每户人数。操作如下图所示。这个公式,同样需要反复用反复练习,才能记住。

解析公式Table.RowCount([家庭明细])如下:

1. 核心含义

它的作用就是:数一下表里有多少行。在 Power Query 场景里,Table.RowCount([家庭明细]) = 统计这一户一共有多少人

这个函数由两部分组成:

第一部分Table.RowCount:表格行数计数。

  • 作用:这是 Power Query(M 语言)里的固定函数,专门用来计算一个表格里有多少行数据。
  • 类比:就像 Excel 里的 =ROWS(区域)函数一样。

第二部分:[家庭明细]:刚才分组生成的嵌套子表格

  • 作用:它指代的是当前这一行里的那个小表格。对于 “宋太均” 这一行,它指代的是 {宋太均, 刘方明, 宋俊兴, 陈庆州}这 4 个人的信息表。对于 “牛秀云” 这一行,它指代的是 {牛秀云, 陈通泉}这 2 个人的信息表。

7)结果如下图所示。这个时候,这个家庭明细的列就完成了它的使命,我们把它删掉。

8)最终处理结果如下图所示。关闭上传即可。

当然,如果你的Power Query是新版的,那可能就不会面临需要编写公式的问题了。因为新版的已经比较非常智能,一些操作通过选择合并或者拆分,或者自定义就能实现函数能实现的功能了。

无论怎样,大家都需要多练习。

今天的内容就是这些,我们明天见。