Power Query - 查找、拆分和删除

3
我有一个包含文本数据的列,我想对它进行一些操作。
  1. 检查它是否有特殊字符,如果有,则拆分并删除文本第二部分前面的零,并返回第二部分(不带前导零)。

  2. 如果没有特殊字符,则删除前导零并返回文本。

我在Excel中使用搜索和替换函数完成了这个操作,但我想在Power BI Power Query Editor中执行相同的操作。 enter image description here

我已经发布了一个答案,但你尝试使用“从示例中提取列”了吗?它可以适应各种分隔符,可能比“代码”解决方案更好。 - Jon
哇,我刚试了一下。运行得很好!简单易用。我从来不知道Power Bi有这个功能。感谢您的回复。 - saran p
2个回答

3
为了去除文本中的前导零,您可以使用以下自定义列表达式:

```=Text.TrimStart([ColumnName],"0")```
=Text.TrimStart([Column1], "0")

在查询编辑器中,在Transform > 分割列 > 按分隔符下,您可以按分隔符和一些额外的设置拆分列。在您的情况下,您可以使用不同的分隔符多次执行此操作。您还可以选择需要哪个部分以及要删除哪个部分。

您还可以多次组合这两种操作。


谢谢,我试过了,但是使用分割列的问题在于对于没有任何分隔符的值它会返回 null。在我的情况下,如果没有分隔符,我只想要实际数据被返回。有什么方法可以做到这一点吗? - saran p

0

使用Text.PositionOfAnyText.Range和变量是可能的。您需要创建一个新的计算列,并使用以下代码:

因此,len、position_special和position_n都是变量

len - 获取文本长度以获取后面的子字符串

position_special = Text.PositionOfAny([Column1], {"-", "_"}, Occurrence.Last)

在列中查找“-”或“_”,如果不存在,则返回-1。您可以在自定义列中测试此功能。
position_n = position_special + 1

只需将起始位置的字符串加1即可。

return_value = if position_special <> -1 then Text.Range([Column1], position_n , (len - position_n)) else Text.TrimStart([Column1], "0")

这个部分是IF/THEN/ELSE部分,所以它检查是否有一个特殊字符,不等于-1,然后将获取范围内的文本,如果没有,则应该找到修剪前导“0”。计算列的完整代码如下:

let
len = Text.Length([Column1]),
position_special = Text.PositionOfAny([Column1], {"-", "_"}, Occurrence.Last),
position_n = position_special + 1,
return_value = if position_special <> -1 then Text.Range([Column1], position_n , (len - position_n)) else Text.TrimStart([Column1], "0")  
in  
return_value

enter image description here

希望能有所帮助。可能需要整理一下,但应该可以得到您想要的结果。

完美,谢谢!顺便说一下,我已经点赞了你的评论,但由于我的声望不到15,所以它不会显示出来。 - saran p
没问题@saranp,这是一个有趣的挑战。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接