来个Power Query小题练练思路!
需求:把数据展开,并从小到大排序!
“-”表示数据数据区间,比如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官方案例:
本文由“壹伴编辑器”提供技术支持