欢迎光临散文网 会员登陆 & 注册

Excel之PowerQuery 连接日期分组的又一种方法

2022-11-13 11:46 作者:孙兴华zz  | 我要投稿

网友提问:将这张表

变成:

第1步:导入数据

【月】这个列,可能需要你修改一下数据类型

第2步:筛选月份

这一步的目的是,每个月份对应的日期,网友只提供了10月,但是既然有月份列,那肯定有还会有其它月。

第3步:修改列,提取具体天,转成数字

第4步:按考勤和项目分组

现在的x代表每一个Table

现在进入思考阶段:

【1】下面这种情况直接Table.Group第五参数搞定

除了这种方法还有其它方式,我们也讲过(不只这些,还有更多方法)

https://www.bilibili.com/video/BV12f4y1K7bD

【2】连续日期分组

在这里也讲过其中一种方法  https://www.bilibili.com/video/BV1cL4y1i7EH

【3】今天这个问题

如下图所示,添加索引列,计算差,利用Table.Group第4参数就可以搞定了

第5步:修改第4步公式,添加索引列

红框之内的公式代表每个Table

第6步:修改第5步公式,添加计算列

Table.AddColumn(,"判断",(y)=>y[日期]-y[索引])

现在蓝色框代表每个Table

第7步:修改第6步公式,对每个Table中的判断列分组

= Table.Group(,"判断",{"具体日期",each _},0)

现在绿色框代表每个Table

each后面的下划线代表每个Table里面的小Table,我们只需要每个小Table里面的【日期】列

现在each 后面的[日期] 代表【具体日期】那列的每个小List

我们需要将每个List中的最小值与最大值用“-”连接

按理说应该将[日期] 改成: List.Min([日期]) & "-" & List.Max([日期])

但是[日期]列为了刚才与索引计算已经改成数值类型了,我们要连接成字符还需要改回文本类型,于是写成:

Text.From(List.Min([日期])) & "-" & Text.From(List.Max([日期])

接下来我们要取【数据】列每个Table的【具体日期】列

先找到谁是每个Table

再用 表[字段名]  的方式提取

现在我们要知道谁是数据列的每个List

我们要将每个List用顿号连接

Text.Combine({"1-7","15-16"},"、")   返回:"1-7、15-16"

Text.Combine(每个List,"、")  

这时你会发现一个问题,就是当初[日期]列只有一个值时,因为我们取的是最小值连接最大值,就出现了现在的问题。

所以我们要判断一下,当List.Count([日期])>1时返回什么,否则返回什么

if List.Count([日期])>1 then Text.From(List.Min([日期])) & "-" & Text.From(List.Max([日期])) else Text.From(List.Min([日期]))

都写到这里了 ,我才发现网友还需要项目简称,在分组加上它就可以了

完成代码如下:

第8步:上载表格

第9步:动态筛选

随便找个地方,写上表头和月份

将其导入PowerQuery

然后我们到表1的筛选那一步修改数据,之前我们写成了固定的:"10月"

现在改成动态

上载表2,选仅创建链接即可。

完成了:以后修改月份,刷新左边的表即可。

本文章配套课件已经发到评论区了。

PowerQuery合集:https://www.bilibili.com/video/BV1oa4y1j75e

更多教程:https://www.bilibili.com/read/cv10222110

Excel之PowerQuery 连接日期分组的又一种方法的评论 (共 条)

分享到微博请遵守国家法律