Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
2 years ago

Extract specific text from a column

Hello,

 

I have a column with some values 

 

Exemple : 

 

P1,A,P2

P2,B,C,P1

P3,A,P1,D,E,G

 

Etc ...

 

I only want to extract P1, P2 and P3 (the result of what i want to extract is known) to result in

 

P1,P2

P2,P1

P3,P1

 

Do you know how to do this ? I have absolutely no idea ...

 

I thought of if Text in {"P1","P2","P3"} ...

 

Thank you in advance

2 Replies

  • You can use the List.Intersect function:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCjDUcdQJMFKK1QGyjXScdJx1AgwhPGOQjKGOi46rjrtSbCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type", "Extract", each 
            Text.Combine(
                List.Intersect(
                    {Text.Split([Column1],","),{"P1","P2","P3"}})
                ,","),type text)
    in
        #"Added Custom"

     

     

  • tackytechtom's avatar
    tackytechtom
    Most Valuable Professional

    Hi Anonymous ,


    Here one way of doing this:

     

    Here the code in Power Query M that you can paste into the advanced editor (if you do not know, how to exactly do this, please check out this quick walkthrough)

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCjDUcdQJMFKK1QGyjXScdJx1AgwhPGOQjKGOi46rjrtSbCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [column = _t]),
        #"Added Custom" = Table.AddColumn(Source, "Custom", each Text.Split([column], ",")),
        #"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
        #"Filtered Rows" = Table.SelectRows(#"Expanded Custom", each Text.Contains([Custom], "P1") or Text.Contains([Custom], "P2") or Text.Contains([Custom], "P3")),
        #"Grouped Rows" = Table.Group(#"Filtered Rows", {"column"}, {{"newcolumn", each Text.Combine( [Custom], ","), type text}}
    )
    in
        #"Grouped Rows"

     

    Let me know, if this helps 🙂

     

    /Tom
    https://www.tackytech.blog/
    https://www.instagram.com/tackytechtom/