Forum Discussion

scotteh-bi's avatar
scotteh-bi
New Member
5 years ago
Solved

array to filter

Hi

I have a standard column with array data like;

a

a,b,c

b,c

a


hoping to create a filter - flattened for users to select single values 

the filter would present as flattened and unique only

b

c


and for example a filter by "c" would return 3 rows

Help please 😛 
thank you!



  • In Power Query, just split this column by the comma delimiter into rows, then remove duplicates. Here is the code:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlSK1QGSOkk6yWAWjAaKxwIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
        #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Column", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column"),
        #"Removed Duplicates" = Table.Distinct(#"Split Column by Delimiter")
    in
        #"Removed Duplicates"

    Turns this:

    into this, which can be used for your slicer.

     

    How to use M code provided in a blank query:
    1) In Power Query, select New Source, then Blank Query
    2) On the Home ribbon, select "Advanced Editor" button
    3) Remove everything you see, then paste the M code I've given you in that box.
    4) Press Done
    5) See this article if you need help using this M code in your model.

     

4 Replies

  • edhans's avatar
    edhans
    Community Champion

    In Power Query, just split this column by the comma delimiter into rows, then remove duplicates. Here is the code:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlSK1QGSOkk6yWAWjAaKxwIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
        #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Column", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column"),
        #"Removed Duplicates" = Table.Distinct(#"Split Column by Delimiter")
    in
        #"Removed Duplicates"

    Turns this:

    into this, which can be used for your slicer.

     

    How to use M code provided in a blank query:
    1) In Power Query, select New Source, then Blank Query
    2) On the Home ribbon, select "Advanced Editor" button
    3) Remove everything you see, then paste the M code I've given you in that box.
    4) Press Done
    5) See this article if you need help using this M code in your model.

     

  • Yeh i got that far 

    didn't realise once in the new table I could join as many to many to underlying column(tags) and use as filter

    thanks
    seems to be working well thanks

     

     

    • edhans's avatar
      edhans
      Community Champion

      Without seeing the data and model not sure I can answer that, other than to say I'd avoid M2M relationships if possible. A 1 to Many is much better.

      Microsoft recommends minimizing use of both Many-to-Many and Bi-Directional Relationships. In other words, unless you are a DAX expert, find another way to remodel your data to conform to a Star Schema and don't use these two features. I avoid them both at all costs.
      Microsoft Guidance on Many-To-Many Relationships