我有一个必须遍历文本字段中每个字符的要求
例如:
a#123456; 12341 becomes 123456;12341
a123456 12341bd becomes 123456;12341
a2017d 12341ds becomes 12341
a123456/12341bd becomes 123456;12341
n/a becomes (empty)
基本上,我在这里清理数据:
注意:-我的步骤可能不正确,但是我期望的输出是我希望从数据中得到的结果。
我们如何在Power BI中使用DAX或查询编辑器来做到这一点?
答案 0 :(得分:4)
我将分两步进行尝试。
首先,让我们删除所有不是数字或分隔符的内容。我们可以使用此公式创建一个自定义列(假设您的起始列名为Raw
):
Text.Remove([Raw], List.Transform({33..43,60..255}, each Character.FromNumber(_)))
这使用了Windows-1252 character numbering,但是您可以使用Text.Remove
函数编写一大串要删除的字符。
此自定义列现在如下所示:
Custom
123456; 12341
123456 12341
2017 12341
123456/12341
/
从这里开始,计划是使用每个分隔符将其拆分,并过滤掉太短的字符串。
Text.SplitAny
函数允许我们指定多个分隔符。例如,公式Text.SplitAny("1;23 4.5-6/ 7:8,9", " ,-./:;")
将返回{"1","23","4","5","6","","7","8","9"}
。
一旦有了子字符串列表,我们就可以使用List.Select
过滤掉不需要的子字符串,然后使用Text.Combine
将它们从子字符串列表连接成单个字符串。
将所有这些放在一起,我们有这个公式
Text.Combine(List.Select(Text.SplitAny([Custom], " ,-./:;"), each Text.Length(_) > 4), ";")
如果愿意,可以将其粉碎成一个步骤
= Table.AddColumn(#"Previous Step", "Clean",
each Text.Combine(
List.Select(
Text.SplitAny(
Text.Remove(
[Raw],
List.Transform(
{33..43,60..255},
each Character.FromNumber(_)
)
),
" ,-./:;"
),
each Text.Length(_) > 4),
";"
)
)