分享

来个Power Query小题练练思路!

 昆仑圃 2020-12-07

需求:把数据展开,并从小到大排序!

“-”表示数据数据区间,比如20-30,表示20到30 这11个数字!


第一步:按照逗号分割

在Excel工作表函数中没有文本分割函数,处理文本类问题非常的痛苦,M函数中有Text.Split等函数,可以轻松按照指定字符分割!

语法:Text.Split(文本,分隔符)

结果:返回按照指定分隔符分割后的列表

下一步,我们就来遍历处理列表,把短划线替换成“..”列表的语法糖!

第二步:遍历列表,转成对应的列表

List.Transform(a,each '{' & Text.Replace(_,'-','..') & '}')

作用是转成列表格式!

想要真正变成列表,需要使用 Expression.Evaluate 来点睛

Expression.Evaluate 和VBA中的Evaluate 的有点类似,可以把文本表达式转成可以计算的表达式!比如案例中,我们只是构建除了List的表示方式

但是无法计算, Expression.Evaluate 处理后则可以计算,比如列表的展开等等!

关于列表的语法糖,

可以看前面写过的文章:PQ实战 | Power Query中如何构建日期列表

第三步:合并列表并排序

List.Combine(b)

List.Combine 把多个列表合并成一个,下一步排序即可!

List.Combine更加基础的案例

排序,直接使用List.Sort,默认就是升序,所以不用加第二参数!

如果是降序,第二参数使用 Order.Descending

List.Sort(c)

排序好,我们需要合并到一个单元格中!

第四步:合并到一个单元格

Text.Combine(List.Transform(d,Text.From),',')

合并直接可以使用Text.Combine即可,但是这样都是数字,Text.Combine要求是文本,所以我们要使用Text.From把数字转成文本,再合并!

肯定有新手会问,关于List.Transform 第二参数在这里的用法问题,直接写了一个函数名称,一般都是each 函数+参数!为什么,申请情况下可以这么写?

首先参数必须是function,也就是函数,其实上下文正好对应这个函数的参数!比如我们上面一般写成 each Text.From(_),此时遍历的元素正好是Text.From的唯一参数,没有歧义!

List.Transform官方案例:

本文由“壹伴编辑器”提供技术支持

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多