Power BI-根据条件从文本字符串中提取数字

时间:2018-09-20 21:51:07

标签: powerbi dax

我已经进行了广泛的搜索,但我不相信这是重复的,但绝对是先前问题的延伸。我正在尝试从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

1 个答案:

答案 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个数字序列的列表,无论其长度如何。

https://docs.microsoft.com/en-us/powerquery-m/list-generate