Power Query 不连续编码展开
我们在工作中会遇到各种各样的情况,例如有人将编码归纳成这个样子:
a1232340082/84/97~114
a1232340082,a1232340084,a1232340097是单个的编码;
a1232340097到a1232340114是连续的编码。
我们需要把这一句展开成为一个编码列表:
我们来分析其中的规律,如果按照Power Query中的列表元素来看,“/”就是“,”,“~”就是“..”。
如果不考虑前缀应该是这样的:
{82,84,97..114},这个列表展开加上前缀就得到我们需要的列表。
所以我们的第一步工作就是组合成这样一个列表,我们会用到Text.Replace函数,这个函数的用法与Excel中SUBSTITUTE函数是一样的,我们要替换两次,分别替换“/”,“~”。
然后在两边加上大括号就好了:
然后我们要把这个字符串变成列表,就像在Excel中使用EVALUATE宏表函数那样,把文本表达式计算出来,Power Query中用这个函数Expression.Evaluate:
接下来就是文本拼接了,我们要逐个加上前缀,这里有一个问题,就是我们的字符长度不同,有的是2个字符,有的是三个字符,需要统一长度,短的字符串用0在前面补齐,我们这时候需要一个像Excel中TEXT函数的Power Query函数,这个Power Query函数是Number.ToText函数,Number.ToText函数就可以指定数值的显示格式。
这个查询中我们默认后面的后缀长度是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:前缀长度
如果需要控制后缀长度,大家可以参考这个思路自己试着编译一个。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。