Forum Discussion

NiugeS's avatar
NiugeS
Helper V
6 years ago
Solved

Split Columns with matching value in multiple rows

Hi - I'm new to Power BI and not sure if this is possible.  I've searched through the forum but might be searching for the wrong terms.

 

I have the following Example data in columns where in the Name column there is the family name and also subsets.  The Type distinguishes the Family name from the subsets (Type A family name Type B subset).   I am trying to find a way to get 'Result Wanted'.  I've tried transforming data, using text delimiters etc but as there are so many variables, haven't had any success.  Any help appreciated.

NameTypeResult Wanted
ABCAABC
ABC-TestBABC
ABC - RunBABC
ABC - TestedBABC
DEF-GADEF-G
DEF-G - TestersBDEF-G
DEF-G-breakBDEF-G
DEF-G - TesterBDEF-G
H I J - K LAH I J - K L
H I J - K L - TesterBH I J - K L
H I J - K L - breakBH I J - K L
H I J - K L - RunBH I J - K L
  • Anonymous's avatar
    Anonymous
    6 years ago

    Here's the M code to do it. Paste into the Advanced Editor in Power Query and examine the steps.

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnRyVtJRcgRhICtWByyiG5JaXAIUckIVVtBVCCrNwyoO0pCagibl4uqm6w41HcKGi8K0FBVD9aDJ6yYVpSZmY5eD68WQ9lDwVPACSnsr+ECtRRZBU4FuDH6lyO7BrxIRRCjqYgE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Name = _t, Type = _t, #"Result Wanted" = _t]),
        #"Added Custom" = Table.AddColumn(Source, "Result Achieved", each if [Type] = "A" then [Name] & " - ARTIFICIAL" else [Name]),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Added Custom", "Result Achieved", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, true), {"Result Achieved.1", "Result Achieved.2"}),
        #"Removed Columns" = Table.RemoveColumns(#"Split Column by Delimiter",{"Result Achieved.2"}),
        #"Trimmed Text" = Table.TransformColumns(#"Removed Columns",{{"Result Achieved.1", Text.Trim, type text}}),
        #"Renamed Columns" = Table.RenameColumns(#"Trimmed Text",{{"Result Achieved.1", "Result Achieved"}})
    in
        #"Renamed Columns"

    Best

    D

7 Replies

  • AilleryO's avatar
    AilleryO
    Memorable Member

    Hi,

     

    You should get the result you want with Split Column.

    Choose delimiter - and tick, Most Right Delimiter.

    It should work.

     

    Otherwise try with Columns from Example, and type in the first values you want.

     

    Have a nice day,

     

    • NiugeS's avatar
      NiugeS
      Helper V

      AilleryO Thank you however I have about 100k of rows with 1000s of Type As and haven't been able to get the result desired.

      • Anonymous's avatar
        Anonymous
        Not applicable

        Here's the M code to do it. Paste into the Advanced Editor in Power Query and examine the steps.

        let
            Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnRyVtJRcgRhICtWByyiG5JaXAIUckIVVtBVCCrNwyoO0pCagibl4uqm6w41HcKGi8K0FBVD9aDJ6yYVpSZmY5eD68WQ9lDwVPACSnsr+ECtRRZBU4FuDH6lyO7BrxIRRCjqYgE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Name = _t, Type = _t, #"Result Wanted" = _t]),
            #"Added Custom" = Table.AddColumn(Source, "Result Achieved", each if [Type] = "A" then [Name] & " - ARTIFICIAL" else [Name]),
            #"Split Column by Delimiter" = Table.SplitColumn(#"Added Custom", "Result Achieved", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, true), {"Result Achieved.1", "Result Achieved.2"}),
            #"Removed Columns" = Table.RemoveColumns(#"Split Column by Delimiter",{"Result Achieved.2"}),
            #"Trimmed Text" = Table.TransformColumns(#"Removed Columns",{{"Result Achieved.1", Text.Trim, type text}}),
            #"Renamed Columns" = Table.RenameColumns(#"Trimmed Text",{{"Result Achieved.1", "Result Achieved"}})
        in
            #"Renamed Columns"

        Best

        D