刚去论坛给大家找了一个不错的案例,我们使用Power Query来给大家解析一下,算是一个不错的拆分和合并的案例!有三列数据,都是日期开始至结束,现在要找出最小日期和最大日期并拼接!选中数据区域,点击【数据】-【自表格/区域】,加载到PQ编辑器!结果需要添加三列,分别是最小日期、最大日期和使用至拼接后的结果!我们想放一下完整的M函数代码截图,方便我们为大家解析为了方便大家理解,M代码中都使用中文变量(实际开发采用英文或者拼英代替,书写也方便)一般我们都转成list处理,这里转成记录是为了方便和我们需要的三列结果拼接,代码中的 _& 其中的 _ 就是每一行对应的记录 ,& 表示拼接,记录1 & 记录2 就可以合并成一个大的记录表!// 按行转成Record
按行转记录 = Table.ToRecords(源)第二步:遍历每一行,按至拆分,合并后,再提取最小、最大和 拼接
按至拆分 = List.Transform(
Record.ToList(_) ,(x)=>
if x is null then {null} else Text.Split(x,"至")
)1、我们使用Record.ToList(_)转成列表,方便我们遍历!2、针对每一行中的每一个元素,如果不是空,都需要使用Text.Split按"至"拆分,形成一个list,空的返回一个{null},方便我们使用List.Combine合并列表,List.Combine要求每一项都是一个list。第三步:合并拆分后的每个list,并删除null值
List.Combine可以把多个list合并为也给list,但是null是我们不需要的使用合并后,我们使用List.RemoveNulls把其中的null删除!合并日期list = List.RemoveNulls(List.Combine(按至拆分))转成日期格式 = List.Transform(合并日期list,Date.From)List.Transform 第二参数要求是函数,如果只有也给参数,我们可以直接写函数名,这里还可以写成 each Date.From(_)之前我们讲过,PQ中数据是强类型的,不同类型无法比较大小,所以我们转成日期类型,方便我们按日期比较大小!感官上发现日期格式是倾斜的和我们上面没转换是不同的!// 从list提取最大、最小日期及合并
需要的三列 = [
最小日期 = List.Min(转成日期格式),
最大日期 = List.Max(转成日期格式),
合并日期 = Text.Format("#{0}至#{1}",{最小日期,最大日期})
]Min和Max和工作表函数差不多,只是参数需要是list,Text.Format 是非常好用的不同类型数据需要合并的函数,因为强类型的缘故,我们如果想合并不同类型的数据,都要转换类型,使用Text.Format 非常轻松,#{0} 和#{1}是表示第二参数list中的第一项和第二项!类推!我们前面处理的都是为了得到三列值,再 _ & 三列记录 就可以得到最后结果的 记录// records转表格
结果 = Table.FromRecords(按行处理)Table.FromRecords 可以把多个记录转成表!
讲解分了7步,其实我们写的时候只要2分钟就可以搞定!逻辑在心中,函数知道大概,配合#shared可以很快搞定,大家多多练习吧!
附件下载:
链接: https://pan.baidu.com/s/1LkgICWOrPfMtXubWIJJ7FA 提取码: snec