我已经进行了广泛的搜索,但我不相信这是重复的,但绝对是先前问题的延伸。我正在尝试从Power BI函数中的文本字符串中提取数字。我已经使用以下方法成功地将字符串中的数字提取为一个值:
Text.Combine(
List.RemoveNulls(
List.Transform(
Text.ToList([string_col]),
each if Value.Is(Value.FromText(_), type number)
then _ else null)
)
)
当我感兴趣的数字是字符串中的唯一数字时,使用此代码非常有用,例如:
“带来 1234567 评论”会导致 1234567
但是,当字符串中出现多个不同的数字时,我无法解析提取我的数字,例如:
“在 1234567 注释上加上 50 告诉我这是重复”,结果为 123456750
我需要做的是在符合条件的字符串中拉一个数字(在我的情况下是一个)。对于我的特定问题,我需要提取的数字将始终是字符串中唯一的7位数字,所以我觉得这应该是一个更简单的答案?
是否可以使用我提供的功能或类似方法仅提取7位数字?如果我离基地很远,有人可以让我走上正确的道路吗?
一如既往,非常感谢社区的帮助。
Diedrich
答案 0 :(得分:0)
首先,您可以使用Text.Select函数提取所有数字。
FirstStep =
Table.AddColumn(Source, "MyNumberColumn", each Text.Select([MyStringColumn], {"0".."9"}))
我在Erik Svensen的这篇博客文章中找到了此解决方案: https://eriksvensen.wordpress.com/2018/03/06/extraction-of-number-or-text-from-a-column-with-both-text-and-number-powerquery-powerbi
对于您的特定要求,也许您需要将NumberColumn列为文本:
FirstStep =
Table.AddColumn(
Source,
"MyTempNumberColumn",
each Text.Select([MyStringColumn], {"0".."9"}),
type text)
从那里开始,根据结果的长度,您可以根据需要测试原始字符串中是否存在七个字符序列,并根据需要进行多次测试,直到到达仅由数字组成的新序列的结尾为止。
SecondStep=
Table.AddColumn("My7numbers",
each if Text.Length([MyNumberColumn]) = 7
then [MyTempNumberColumn]
else if
Text.Contains([MyStringColumn],
Text.Range([MyTempNumberColumn], 0, 7))
then
Text.Range([MyTempNumberColumn], 0, 7))
else if
Text.Contains([MyStringColumn],
Text.Range([MyTempNumberColumn], 1, 7)
then
Text.Range([MyTempNumberColumn], 1, 7))
根据可获得的数字数量,可能值得尝试使用Liste.Generate函数,该函数将给出[MyTempNumberColumn]中每7个数字序列的列表,无论其长度如何。