1

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

My Data
1234567Z1
2345T10
222222T10Z1
111
111A

Should Become
123456
12345
222222
111
111

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

现在,在 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)
             )
         )
     )
 )

谢谢

4

1 回答 1

3

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

  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. 在包含您的数据的表中,使用以下公式添加自定义列:

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

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

于 2015-05-08T22:13:15.913 回答