Text.PositionOf 提取重复值

本期案例对编码中的重复值进行提取,前后转换效果如下:

解题套路

1.Text.PositionOf

解题思路:对编码进行拆分去重,再对拆分结果进行遍历查询在原编码中出现的位置个数,对于个数大于1的,返回编码值,其余的返回Null。最后对结果进行列合并。

Table.AddColumn(源,"重复",each Text.Combine(List.Transform(List.Distinct(Text.Split([编码],",")),(x)=>if List.Count(Text.PositionOf([编码],x,2))>1 then x else null),"、"))

这里也可以使用List.PositionOf,只要将拆分后的结果作为函数第一参数即可。

Table.AddColumn(源,"重复",each let lst=Text.Split([编码],",") in Text.Combine(List.Transform(List.Distinct(lst),(x)=>if List.Count(List.PositionOf(lst,x,2))>1 then x else null),"、"))

2.Table.Group

解题思路:对编码进行拆分并转换为表,对编码进行分组并计算行数,最后筛选行数大于1的部分,进行深化合并。

Table.AddColumn(源,"重复",each Text.Combine(Table.SelectRows(Table.Group(Table.FromValue(Text.Split([编码],",")),"Value",{"a",Table.RowCount}),each [a]>1)[Value],"、"))

3.List.Accumulate

解题思路:对编码进行拆分排序,对各项进行逐项类似累加的操作,对于编码列表个数大于1的保留编码,其余返回null值。

Table.AddColumn(源,"重复",each Text.Combine(List.Accumulate(List.Sort(Text.Split([编码],","))&{"A"},{{},{}},(x,y)=>if x{1}={} or not List.Contains(x{1},y) then {x{0}&{if List.Count(x{1})>1 then x{1}{0} else null},{y}} else {x{0},x{1}&{y}}){0},"、"))

4.List.Difference

解题思路:List.Difference用于返回两个列表之间的差异数,但它有个特性,支持重复值。在本案例中,对编码进行拆分获得列表lst,然后用lst以及去重后的lst作为函数的两个参数,获得最终的结果。

Table.AddColumn(源,"重复",each let lst=Text.Split([编码],",") in Text.Combine(List.Distinct(List.Difference(lst,List.Distinct(lst))),"、"))

以上是本期内容。

展开阅读全文

页面更新:2024-03-12

标签:遍历   套路   本期   函数   个数   思路   案例   参数   两个   列表

1 2 3 4 5

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

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

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top