Power Query M如何筛选长度1<x≤3的文本以排除空值
M代码多条件筛选文本长度解决方案
问题背景
尝试从生成的列表中提取处于两个指定长度之间的数值数据,目前代码中仅使用单个参数筛选文本,即通过Text.Length(_)<=3筛选长度不超过3个字符的文本。
注:为简化问题,示例数据已做简化,需通过该方法拆分数据。
现有M代码
let Source = Excel.CurrentWorkbook(){[Name="Table10"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}), #"Added Custom" = Table.AddColumn( #"Changed Type", "Custom", each Text.Split([Column1], " ")), #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Column1"}), //仅提取数值到列表 #"Added Custom1" = Table.AddColumn(#"Removed Columns1", "Custom.1", each List.Transform([Custom], each Text.Select(_, {"0".."9", "."}))), //提取长度≤3的值到列表 #"Added Custom2"= Table.AddColumn(#"Added Custom1", "Custom.2", each List.Select([Custom.1],each Text.Length(_)<=3)), //将提取的值合并为新列表 #"Added Custom3" = Table.AddColumn(#"Added Custom2", "Custom.3", each Text.Combine([Custom.2], " ,")), #"Removed Columns" = Table.RemoveColumns(#"Added Custom3",{"Custom", "Custom.1", "Custom.2"}) in #"Removed Columns"
存在问题
现有代码筛选长度≤3的文本时,空单元格也会被选中,需筛选长度x满足1<x≤3的文本。
输入数据示例
FF3136451 200 3152678 100 (NDM) 8315865 100 0000660 50
修复方案
只需修改#"Added Custom2"步骤的筛选条件,增加长度大于1的判断即可,修改后对应代码如下:
//提取长度满足1<x≤3的值到列表 #"Added Custom2"= Table.AddColumn(#"Added Custom1", "Custom.2", each List.Select([Custom.1],each Text.Length(_) > 1 and Text.Length(_) <=3))
如果需要排除非数值内容的干扰,可额外增加有效性判断,代码如下:
#"Added Custom2"= Table.AddColumn(#"Added Custom1", "Custom.2", each List.Select([Custom.1], each try Value.Is(Value.FromText(_), type number) and Text.Length(_) > 1 and Text.Length(_) <= 3 otherwise false))
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

