Forum Discussion
Split CamelCase text to new column
So here's the scenario, I have 12 enums coming through to my table. The enum text values are in CamelCase and I want to split them at the left of each upper case letter (except for the first letter since it is the beginning of the enum text value).
Example:
EnumOne -> Enum One
EnumTwo -> Enum Two
Etc.
Can anyone give me some guidelines on how I should go about doing this? I'd like to do it within PowerBI dekstop via DAX or Power Query.
Thanks!
5 Replies
- MarcelBeugCommunity Champion
It is a bit confusing if you want to split the text (into a list, or multiple columns) or insert a space.
I assume you want to insert a space.
This is a Power Query solution:
let Source = #table(type table[Enum = text],{{"EnumOne"},{"EnumTwo"}}), Splitted = Table.TransformColumns(Source,{{"Enum", each Text.Insert(_, Text.PositionOfAny(_,{"A".."Z"},Occurrence.Last)," "), type text}}) in SplittedEdit: this is how the split the column into 2 columns:
let Source = #table(type table[Enum = text],{{"EnumOne"},{"EnumTwo"}}), #"Split Column by Position" = Table.SplitColumn(Source, "Enum", each Splitter.SplitTextByPositions({0, Text.PositionOfAny(_,{"A".."Z"},Occurrence.Last)})(_), {"Enum.1", "Enum.2"}), #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Position",{{"Enum.1", type text}, {"Enum.2", type text}}) in #"Changed Type"You can find information on Power Query functions in my dashboard.
- JeremyBFrequent Visitor
Yes, I want to be able to split the text with a space at the left of each upper case letter into a new computed column. I don't necessarily need to keep the original column though, I just need the text to be split.
I'll give these a try and see if I can get them to work. I appreciate the help!
EDIT:
Is it possible to do it for each capital letter instead of the last one?
Ex.
EnumNumberOne -> Enum Number One
I tried changing 'Occurrence.Last' to 'Occurrence.All', but was given an error.
- MarcelBeugCommunity Champion
Yes, it can.
In such cases, the biggest challenge is to design the query such that it is dynamic with regard to the number of resulting columns.
This requires some Advanced Editor programming, resulting in:
let Source = #table(type table[Enum = text],{{"EnumNumberOne"},{"EnumTwo"}}), Splitted = Table.TransformColumns(Source, {{"Enum", each Splitter.SplitTextByPositions(Text.PositionOfAny(_,{"A".."Z"},Occurrence.All))(_)}}), Tabled = Table.TransformColumns(Splitted,{{"Enum", each Table.FromColumns(List.Zip({_}))}}), ColumnNames = Table.ColumnNames(Table.Combine(Tabled[Enum])), NewColumnNames = List.Transform(ColumnNames, each "Enum."&Text.Middle(_,6)), ExpandedEnum = Table.ExpandTableColumn(Tabled, "Enum", ColumnNames, NewColumnNames), TransformList = List.Transform(NewColumnNames, each {_,type text}), Typed = Table.TransformColumnTypes(ExpandedEnum, TransformList) in TypedResult: