Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more
I have a process that works but it is rather inelegant. I'm sure there must be a better way to do this.
In a certain column, the last several characters might be numbers. If the length of a number sequence is four, five, or six characters then I need to extract that sequence into a new column. If the length of final sequence numbers is less than four characters, then nothing should be extracted. There may be numbers at the beginning of the string and/or in the middle but only the numerical characters at the end of the string are of interest.
There is not a constant delimiter. There may or may not be a space between the last alpha character and the first numerical character. There might or might not be a symbol chacacter, such as a colon or a dash.
ColumnA NewColumn
TEXT TEXT TEXT 123456 123456
TEXT TEXT TEXT TEXT 1234 1234
TEXT TEXT TEXT12345 12345
TEXT 123 TEXT TEXT-123456 123456
1234 TEXT TEXT TEXT:12345 12345
TEXT TEXT TEXT TEXT 123 null
1234 TEXT TEXT TEXT 1 null
TEXT TEXT 123456 TEXT null
Solved! Go to Solution.
You may use below in a custom column
= if Text.Select(Text.End([ColumnA],6),{"0".."9"})=Text.End([ColumnA],6) then Text.End([ColumnA],6)
else if Text.Select(Text.End([ColumnA],5),{"0".."9"})=Text.End([ColumnA],5) then Text.End([ColumnA],5)
else if Text.Select(Text.End([ColumnA],4),{"0".."9"})=Text.End([ColumnA],4) then Text.End([ColumnA],4)
else null
EDIT - Another alternative construct is this which is more flexible
=[a=List.LastN(List.Transform(Text.ToList([ColumnA]),(x)=>if Text.Contains(Text.Combine({"0".."9"}),x) then x else null), each _ <> null),
b=if List.Count(a)<4 then null else Text.Combine(a)][b]
You may use below in a custom column
= if Text.Select(Text.End([ColumnA],6),{"0".."9"})=Text.End([ColumnA],6) then Text.End([ColumnA],6)
else if Text.Select(Text.End([ColumnA],5),{"0".."9"})=Text.End([ColumnA],5) then Text.End([ColumnA],5)
else if Text.Select(Text.End([ColumnA],4),{"0".."9"})=Text.End([ColumnA],4) then Text.End([ColumnA],4)
else null
EDIT - Another alternative construct is this which is more flexible
=[a=List.LastN(List.Transform(Text.ToList([ColumnA]),(x)=>if Text.Contains(Text.Combine({"0".."9"}),x) then x else null), each _ <> null),
b=if List.Count(a)<4 then null else Text.Combine(a)][b]
That's fantastic. Thank you!
I understand how the first approach works but I'm having trouble wrapping my mind around the second approach.
Would you explain how it works?
The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!
| User | Count |
|---|---|
| 19 | |
| 9 | |
| 8 | |
| 7 | |
| 6 |