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)
)
)
)
)
谢谢
可能有几种方法可以做到这一点。这是一种方法:
- 创建查询信件:
let
Source = { "a" .. "z" } & { "A" .. "Z" }
in
Source
- 创建查询 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
- 在包含您的数据的 table 中,使用以下公式添加自定义列:
Text.Range([ColumnWithData], 0, GetFirstLetterIndex([ColumnWithData]))
该公式将获取从您的数据文本到第一个字母的所有内容。
我有一个 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)
)
)
)
)
谢谢
可能有几种方法可以做到这一点。这是一种方法:
- 创建查询信件:
let
Source = { "a" .. "z" } & { "A" .. "Z" }
in
Source
- 创建查询 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
- 在包含您的数据的 table 中,使用以下公式添加自定义列:
Text.Range([ColumnWithData], 0, GetFirstLetterIndex([ColumnWithData]))
该公式将获取从您的数据文本到第一个字母的所有内容。