【问题标题】:Power Query - find split and removePower Query - 查找拆分和删除
【发布时间】:2019-10-01 19:10:24
【问题描述】:

我有一列包含文本数据。我想对其进行一些操作。

  1. 检查是否有特殊字符,如果有,则从文本的第二部分拆分并删除前导零,并返回第二部分(没有前导零)。

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

我在 Excel 中使用搜索和替换功能执行此操作,但我想在 Power BI Power Query 编辑器中执行相同的操作。

【问题讨论】:

  • 我已经发布了一个答案,但是您是否尝试过使用“示例中的列”?它可以容纳各种分隔符,可能比“代码”解决方案更好
  • 哇,我刚试过。工作得很好!简单易行。从来不知道Power Bi有这个功能。感谢您的回复

标签: powerbi powerquery m


【解决方案1】:

要删除文本中的前导零,您可以使用以下自定义列表达式:

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

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

您也可以将这两个操作组合几次。

【讨论】:

  • 谢谢人。我试过了,但拆分列的问题是它为没有任何分隔符的值返回 null。就我而言,如果没有分隔符,我只想返回实际数据。有办法吗?
【解决方案2】:

可以使用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

希望对您有所帮助。它可能需要整理,但它应该可以满足您的需求

【讨论】:

  • 完美,谢谢!仅供参考,我已对您的评论表示赞同,但由于我的声誉少于 15 个,因此未显示它
  • 没问题@saranp,这是一个有趣的挑战
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多