Forum Discussion
Anonymous
6 years agoNot applicable
Aligning split columns
Hello, I have the following in a column: a,b,c c,b,d d,a,c I can split columns using the delimiter so it becomes: a b c c b d d a c and...
- 6 years ago
Hi Anonymous
I would recommend you
- Split the values into a list contained within the column (not expanded into separate columns)
- Convert each list to a record with field names equal to the values themselves
- Expand the record columns
Here is some sample M code to illustrate:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WStRJ0klWitWJVkoGslLArBSdRJBYLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Text = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Text", type text}}), SplitToList = Table.TransformColumns( #"Changed Type", {{"Text", Splitter.SplitTextByDelimiter(","),type {text}}} ), ConvertToRecord = Table.TransformColumns(SplitToList, {{"Text", each Record.FromList(_,_)}}), #"Expanded Text" = Table.ExpandRecordColumn(ConvertToRecord, "Text", List.Distinct(List.Combine(SplitToList[Text]))) in #"Expanded Text"Regards
Owen
- 6 years ago
- Anonymous6 years ago
Hi Anonymous
OwenAuge and Ashish_Mathur has shown you the way in PowerQuery Editor, and you can try my way by dax.
I use calculated columns to achieve your goal, after I split the value.
And I add an index column to sort the new columns.
A = IF('Table'[Column1.1]="a" ||'Table'[Column1.2]="a"||'Table'[Column1.3]="a","a",BLANK())B = IF('Table'[Column1.1]="b" ||'Table'[Column1.2]="b"||'Table'[Column1.3]="b","b",BLANK())C = IF('Table'[Column1.1]="c" ||'Table'[Column1.2]="c"||'Table'[Column1.3]="c","c",BLANK())D = IF('Table'[Column1.1]="d" ||'Table'[Column1.2]="d"||'Table'[Column1.3]="d","d",BLANK())Result:
You can download the pbix file from this link: Aligning split columns
Best Regards,
Rico Zhou
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
OwenAuger
Super User
6 years agoHi Anonymous
I would recommend you
- Split the values into a list contained within the column (not expanded into separate columns)
- Convert each list to a record with field names equal to the values themselves
- Expand the record columns
Here is some sample M code to illustrate:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WStRJ0klWitWJVkoGslLArBSdRJBYLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Text = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Text", type text}}),
SplitToList = Table.TransformColumns( #"Changed Type", {{"Text", Splitter.SplitTextByDelimiter(","),type {text}}} ),
ConvertToRecord = Table.TransformColumns(SplitToList, {{"Text", each Record.FromList(_,_)}}),
#"Expanded Text" = Table.ExpandRecordColumn(ConvertToRecord, "Text", List.Distinct(List.Combine(SplitToList[Text])))
in
#"Expanded Text"Regards
Owen
- Paxro1 year agoFrequent Visitor
An elegant and effective process, thank you very much! This worked for a need similar to OP's post.