Power Query 不连续编码展开

我们在工作中会遇到各种各样的情况,例如有人将编码归纳成这个样子:

a1232340082/84/97~114

a1232340082,a1232340084,a1232340097是单个的编码;

a1232340097到a1232340114是连续的编码。

我们需要把这一句展开成为一个编码列表:

Power Query 不连续编码展开

我们来分析其中的规律,如果按照Power Query中的列表元素来看,“/”就是“,”,“~”就是“..”。

如果不考虑前缀应该是这样的:

{82,84,97..114},这个列表展开加上前缀就得到我们需要的列表。

所以我们的第一步工作就是组合成这样一个列表,我们会用到Text.Replace函数,这个函数的用法与Excel中SUBSTITUTE函数是一样的,我们要替换两次,分别替换“/”,“~”。

然后在两边加上大括号就好了:

Power Query 不连续编码展开

然后我们要把这个字符串变成列表,就像在Excel中使用EVALUATE宏表函数那样,把文本表达式计算出来,Power Query中用这个函数Expression.Evaluate:

Power Query 不连续编码展开

接下来就是文本拼接了,我们要逐个加上前缀,这里有一个问题,就是我们的字符长度不同,有的是2个字符,有的是三个字符,需要统一长度,短的字符串用0在前面补齐,我们这时候需要一个像Excel中TEXT函数的Power Query函数,这个Power Query函数是Number.ToText函数,Number.ToText函数就可以指定数值的显示格式。

Power Query 不连续编码展开

这个查询中我们默认后面的后缀长度是3,前缀是8,如果我们把这个查询做成一个函数,可以用两个参数来控制,如果要控制后缀长度,两个参数也足够了,只不过要修改Number.ToText(_,"000")中的"000"写法,用Text.Repeat函数来写出对应个数的0,当然先要计算单个编码的长度,然后减去前缀长度。

我们先写一个简单的

(t,l) => List.Transform(Expression.Evaluate("{"&Text.Replace(Text.Replace(Text.End(t,Text.Length(t)-l),"/",","),"~","..")&"}"),each Text.Range(t,0,l)&Number.ToText(_,"000"))

参数t:文本描述的编码

参数l:前缀长度

如果需要控制后缀长度,大家可以参考这个思路自己试着编译一个。

展开阅读全文

页面更新:2024-05-11

标签:组合   前缀   括号   表达式   写法   后缀   字符串   有的是   函数   长度   字符   文本   参数   两个   列表   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top