Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Finding multiple strings to create a conditional column

Hi guys, I have the following dataset. Author         Message Chris            I like apples and pears in my cake Ryan            I hate pears and peaches  What I want to do, is create a n...
  • CNENFRNL's avatar
    5 years ago

     

    let
        Lookup = #table({"Category", "Item"}, {{"Fruit", {"apple", "pear", "peach"}}, {"Snack", {"cookies", "cake"}}, {"Cola", {"Coka", "Pepsi"}}}),
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Vc0xDsIwDAXQq3x5zg0YO7EgxBplMI1FrJQ4irv0NpyFkxVVXdif9GKkqQz174cCXbFoFXDvizi4ZXTh4dCG94aZq1AKkR4bt0MXXuUkJ56L+GFu9rS8/dRklWEDd+muAU10LTKgjpdZvuDvpJR2", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Author = _t, Message = _t]),
        #"Added Custom" = let lookup = Table.ToRecords(Lookup) in Table.AddColumn(Source, "Category", each List.Accumulate(lookup, {}, (s,c) => s & {if List.AnyTrue(List.Transform(c[Item], (substring) => Text.Contains([Message], substring))) then c[Category] else null})),
        #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Category", each Text.Combine(List.Transform(_, Text.From), ","), type text})
    in
        #"Extracted Values"

     

  • Anonymous's avatar
    Anonymous
    5 years ago

    Awesome, this works! Thank you very much.

    Minor thing to add: How do I set it up so that it won't be Fruit, Snack on the same row, but create an extra (duplicate) row for every individual category?
    Like this:

    Author         Message                                             Category
    Chris            I like apples and pears in my cake      Fruit
    Chris            I like apples and pears in my cake      Snack
    Ryan            I hate pears and peaches                    Fruit