在工作中,我们会遇到各种情况,例如这个编码:"a1232340082/84/97~114",其中a1232340082、a1232340084、a1232340097是单独的编码,而a1232340097到a1232340114是连续的编码。我们需要把它们展开成一个编码列表。

为了达到这个目的,我们可以使用PowerQuery中的列表元素来进行分析。在这个编码中,"/"可以替换成逗号“,”,而"~"可以替换成"..”。如果不考虑前缀,这个编码应该被展开成这样的列表:"82, 84, 97..114"。最后,我们只需要在两边加上大括号,就可以得到想要的编码列表。

第一步,我们需要使用Text.Replace函数,它的使用方式类似于Excel的SUBSTITUTE函数。我们需要替换两次,分别替换"/"和"~"。然后在两边加上大括号。

接下来,我们需要将字符串转换为列表。在PowerQuery中,我们可以使用Expression.Evaluate函数,它可以将文本表达式计算出来。然后,我们需要逐个加上前缀,为了处理长度不同的编码,我们还需要使用Number.ToText函数,在前面补上0,以保证编码长度一致。

如果我们把这个查询做成一个函数,可以用两个参数来控制编码的前缀和后缀长度。如果需要控制后缀长度,可以使用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表示前缀长度。现在,你可以试试编写一个自己的函数,用它来控制后缀长度。