本期案例对敬请关注码中得重复值进行提取,前后转换效果如下:
解题套路
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))),"、"))
以上是本期内容。