Power Query中列内文本排序问题的技术求助
解决Power Query中列内文本排序的问题
没问题,我来帮你搞定这个列内文本排序的需求!你说的是每个单元格里的文本内容(比如用分隔符分开的条目)要单独排序,而不是把整列的行重新排序对吧?下面是具体的实现方法:
具体步骤(以逗号分隔文本为例)
假设你的CANAL / BU列内容是用逗号+空格分隔的(比如"Retail,Online,Wholesale"或乱序的"Wholesale,Retail,Online"),我们可以通过Power Query的自定义列来实现:
在Power Query编辑器中选中数据表,点击添加列 > 自定义列
在弹出的对话框中输入以下M语言代码:
Text.Combine(List.Sort(Text.Split([CANAL / BU], ", ")), ", ")这段代码的逻辑拆解:
Text.Split([CANAL / BU], ", "):把每个单元格的文本按逗号+空格分割成列表(如果你的分隔符是纯逗号、分号或空格,直接替换引号里的内容即可)List.Sort(...):对分割后的列表进行升序排序(想要降序的话,加第二个参数Order.Descending,比如List.Sort(..., Order.Descending))Text.Combine(..., ", "):把排序后的列表重新合并成文本,用原分隔符连接
点击确定后,你会得到一个新列,每个单元格内的文本都已经按序排列
若需要替换原列,直接把新列重命名为
CANAL / BU即可
适配其他分隔符的情况
如果你的文本用的是分号分隔,只需要修改代码里的分隔符参数:
Text.Combine(List.Sort(Text.Split([CANAL / BU], "; ")), "; ")
进阶:区分大小写排序
默认排序不区分大小写,如果需要严格区分(比如"A"排在"a"之前),可以用带比较器的写法:
Text.Combine(List.Sort(Text.Split([CANAL / BU], ", "), (a,b) => Text.Compare(a,b,Comparer.Ordinal)), ", ")
这样操作后,每个单元格内的文本内容就会按你想要的规则排序啦!
内容的提问来源于stack exchange,提问作者Ben Cruz
相关产品推荐
相关产品推荐

