Power Query - 从数值中删除字符

Power Query - remove characters from number values

我有一个 table 字段,其中数据包含我们的会员 ID 编号,后跟字符或字符 + 数字字符串 例如:

My Data
1234567Z1
2345T10
222222T10Z1
111
111A

Should Become
123456
12345
222222
111
111

我只想获取会员编号(如上文 Should Become 所示)。 IE。第一个字符左边的所有数字。 由于每个人的会员号长度可能不同(前 1 到 7 位)并且使用的字母可能不同(a 到 z,0 到 8 个字符长),我认为我不能拆分该字段.

现在,在 Power Query 中,我执行了 27 个搜索和替换命令来清理这些数据(例如,查找 T10 替换为空,查找 T20 替换为空等)

谁能提出更好的实现方法?

我确实在 Excel 中为此成功创建了一个公式...但我现在正尝试在 Power Query 中执行此操作,但我不知道如何转换公式 - 我也不确定是最有效的解决方案。

=iferror(value(left([MEMBERID],7)),
     iferror(value(left([MEMBERID],6)),
         iferror(value(left([MEMBERID],5)),
             iferror(value(left([MEMBERID],4)),
                 iferror(value(left([MEMBERID],3)),0)
             )
         )
     )
 )

谢谢

可能有几种方法可以做到这一点。这是一种方法:

  1. 创建查询信件:

let Source = { "a" .. "z" } & { "A" .. "Z" } in Source

  1. 创建查询 GetFirstLetterIndex:

let Source = (text) => let // For each letter find out where it shows up in the text. If it doesn't show up, we will have a -1 in the list. Make that positive so that we return the index of the first letter which shows up. firstLetterIndex = List.Transform(Letters, each let pos = Text.PositionOf(text, _), correctedPos = if pos < 0 then Text.Length(text) else pos in correctedPos), minimumIndex = List.Min(firstLetterIndex) in minimumIndex in Source

  1. 在包含您的数据的 table 中,使用以下公式添加自定义列:

Text.Range([ColumnWithData], 0, GetFirstLetterIndex([ColumnWithData]))

该公式将获取从您的数据文本到第一个字母的所有内容。