Forum Discussion

RobPastoor's avatar
RobPastoor
Regular Visitor
2 years ago
Solved

New column from 2 linked columns that can appear multiple times in the table.

I have 2 linked columns in a table, Language and Value, which can appear multiple times in the table as Language[0..n] and Value[0..n].
The number of times may differ per table.
Language[0..n] contains the language code per country (nl-NL, en-GB, de-DE, etc.), and can be placed per record in any Language[0..n] column. The corresponding Value[0..n] column contains a description.
I want to (dynamically) add a column, where if Language[0..] is equal to "nl-NL" the value of Value[0..n] is placed in the new column.
Any help is welcome...
  • Hi RobPastoor, 

     

    1. do not split your description and tables to separate posts please. You can edit your post if needed
    2. do not put your description into code just send is as text

    Result

     

    v1 - Simple way

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZRNj4MgEIb/i+eaVHH7cdzvQzcbs91b04PbjpFIJQG97K9faiqOgAs9EQI878zwzhwOUZLGSfoQLaKGxZ8fav0uSmBqPUP88nrdU3mq1ApN/P7Un/8wUGsp4revYV900XFxg63Q4XNVUAmIvm95Tx9o1wsCqe3brmIja42e7grZ4peMS2iR1qO4cCoAwXYM6BmEil8UTT1SNwijAuJsmg7vRA/WwqKrcYinCi6Agtw6Dm0Bg2bpDTiyxDja/tZUSmjQk5x3JRLIOS8RP+dQjrDEczFESsNSd53s3I1cp6XQOOJwneky04VzriNZwGNTbBaG++Fmu2CXWQ7V1JXX93afGI2kWWvHXZNlas2xNnbMrnyNgniajGz/K9G9PT1Qs+Xds2Q27ywJsIRvDmpYGvCZgR+SEa+sK9BpKhqWBQ03c1pZw+74Bw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Article number" = _t, Language1 = _t, Value1 = _t, Language2 = _t, Value2 = _t, Language3 = _t, Value3 = _t, Language4 = _t, Value4 = _t]),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Article number"}, "Attribute", "Value"),
        #"Extracted Text Before Delimiter" = Table.TransformColumns(#"Unpivoted Other Columns", {{"Attribute", each Splitter.SplitTextByCharacterTransition((x)=> not List.Contains({x}, {"0".."9"}), {"0".."9"})(_){0} , type text}}),
        #"Pivoted Column" = Table.Pivot(#"Extracted Text Before Delimiter", List.Distinct(#"Extracted Text Before Delimiter"[Attribute]), "Attribute", "Value", each _),
        #"Added Table" = Table.AddColumn(#"Pivoted Column", "Table", each Table.FromColumns({[Language], [Value]}, {"Language", "Val"}), type table),
        #"Removed Columns" = Table.RemoveColumns(#"Added Table",{"Language", "Value"}),
        #"Expanded Table" = Table.ExpandTableColumn(#"Removed Columns", "Table", {"Language", "Val"}),
        #"Added Value" = Table.AddColumn(#"Expanded Table", "Value", each if [Language] = "nl-NL" then [Val] else null, type text),
        #"Filtered Rows" = Table.SelectRows(#"Added Value", each ([Value] <> null)),
        #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows",{"Language", "Val"})
    in
        #"Removed Columns1"

     

     

    v2 - Elegant

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZRNj4MgEIb/i+eaVHH7cdzvQzcbs91b04PbjpFIJQG97K9faiqOgAs9EQI878zwzhwOUZLGSfoQLaKGxZ8fav0uSmBqPUP88nrdU3mq1ApN/P7Un/8wUGsp4revYV900XFxg63Q4XNVUAmIvm95Tx9o1wsCqe3brmIja42e7grZ4peMS2iR1qO4cCoAwXYM6BmEil8UTT1SNwijAuJsmg7vRA/WwqKrcYinCi6Agtw6Dm0Bg2bpDTiyxDja/tZUSmjQk5x3JRLIOS8RP+dQjrDEczFESsNSd53s3I1cp6XQOOJwneky04VzriNZwGNTbBaG++Fmu2CXWQ7V1JXX93afGI2kWWvHXZNlas2xNnbMrnyNgniajGz/K9G9PT1Qs+Xds2Q27ywJsIRvDmpYGvCZgR+SEa+sK9BpKhqWBQ03c1pZw+74Bw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Article number" = _t, Language1 = _t, Value1 = _t, Language2 = _t, Value2 = _t, Language3 = _t, Value3 = _t, Language4 = _t, Value4 = _t]),
        Transform = Table.FromRows(
           List.TransformMany(Table.ToRows(Source),
                each {List.PositionOf(_, "nl-NL")},
                (x,y)=> {x{0}} & List.Transform({y+1}, (a)=> x{a} ) ),
           type table[Article number=text, Value=text] )
    in
        Transform

     

     

    v3 - Just for fun ๐Ÿ™‚

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZRNj4MgEIb/i+eaVHH7cdzvQzcbs91b04PbjpFIJQG97K9faiqOgAs9EQI878zwzhwOUZLGSfoQLaKGxZ8fav0uSmBqPUP88nrdU3mq1ApN/P7Un/8wUGsp4revYV900XFxg63Q4XNVUAmIvm95Tx9o1wsCqe3brmIja42e7grZ4peMS2iR1qO4cCoAwXYM6BmEil8UTT1SNwijAuJsmg7vRA/WwqKrcYinCi6Agtw6Dm0Bg2bpDTiyxDja/tZUSmjQk5x3JRLIOS8RP+dQjrDEczFESsNSd53s3I1cp6XQOOJwneky04VzriNZwGNTbBaG++Fmu2CXWQ7V1JXX93afGI2kWWvHXZNlas2xNnbMrnyNgniajGz/K9G9PT1Qs+Xds2Q27ywJsIRvDmpYGvCZgR+SEa+sK9BpKhqWBQ03c1pZw+74Bw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Article number" = _t, Language1 = _t, Value1 = _t, Language2 = _t, Value2 = _t, Language3 = _t, Value3 = _t, Language4 = _t, Value4 = _t]),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Article number"}, "Attribute", "Value"),
        #"Extracted Text Before Delimiter" = Table.TransformColumns(#"Unpivoted Other Columns", {{"Attribute", each Splitter.SplitTextByCharacterTransition((x)=> not List.Contains({x}, {"0".."9"}), {"0".."9"})(_){0} , type text}}),
        #"Grouped Rows" = Table.Group(#"Extracted Text Before Delimiter", {"Article number"}, {{"Value", each _{List.PositionOf([Value], "nl-NL")+1}[Value] , type text}})
    in
        #"Grouped Rows"

     

10 Replies

  • Please provide sample data that covers your issue or question completely, in a usable format (not as a screenshot).

    Do not include sensitive information or anything not related to the issue or question.

    If you are unsure how to upload data please refer to https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216

    Please show the expected outcome based on the sample data you provided.

    Want faster answers? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523

  • RobPastoor's avatar
    RobPastoor
    Regular Visitor
    Article numberLanguage1Value1Language2Value2Language3Value3
    12-125nl-NLTafelde-DETischen-GBTable
    12-126nl-NLStoelen-GBChairde-DEStuhl
    12-127nl-NLKasten-GBClosetde-DEKleiderschrank
    12-128en-GBStoolnl-NLKrukde-DESchemel
    12-129de-DESchemelen-GBStoolnl-NLKruk
    12-130de-DESitzkissenen-GBPoofnl-NLPoef
    12-131en-GBPoofnl-NLPoefde-DESitzkissen
    12-132de-DESchemelnl-NLKruken-GBStool
    12-133nl-NLTafelen-GBTablede-DETisch
    12-134en-GBTablede-DETischnl-NLTafel
    12-135nl-NLKastde-DEKleiderschranken-GBCloset
    12-136en-GBChairde-DEStuhlnl-NLStoel
    12-137nl-NLStoelde-DEStuhlen-GBChair
    12-138en-GBClosetnl-NLKastde-DEKleiderschrank
    12-139de-DEKleiderschranknl-NLKasten-GBCloset
    12-140nl-NLStoelen-GBChairde-DEStuhl
    12-141nl-NLTafelde-DETischen-GBTable
    12-142de-DEStuhlnl-NLStoelen-GBChair
    12-143de-DETischen-GBTablenl-NLTafel
    12-144nl-NLKruken-GBStoolde-DESchemel
  • RobPastoor's avatar
    RobPastoor
    Regular Visitor
    Article numberLanguage1Value1Language2Value2Language3Value3Language4Value4
    12-125nl-NLTafelde-DETischen-GBTablefr-FRTableau
    12-126fr-FRChaisenl-NLStoelen-GBChairde-DEStuhl
    12-127nl-NLKasten-GBClosetfr-FRArmoirede-DEKleiderschrank
    12-128en-GBStoolfr-FRTabouretnl-NLKrukde-DESchemel
    12-129de-DESchemelen-GBStoolnl-NLKrukfr-FRTabouret
    12-130de-DESitzkissenfr-FRPoufen-GBPoofnl-NLPoef
    12-131en-GBPoofnl-NLPoefde-DESitzkissenfr-FRPouf
    12-132fr-FRTabouretde-DESchemelnl-NLKruken-GBStool
    12-133nl-NLTafelen-GBTablede-DETischfr-FRTableau
    12-134en-GBTablede-DETischnl-NLTafelfr-FRTableau
    12-135nl-NLKastfr-FRArmoirede-DEKleiderschranken-GBCloset
    12-136en-GBChairde-DEStuhlnl-NLStoelfr-FRChaise
    12-137nl-NLStoelde-DEStuhlen-GBChairfr-FRChaise
    12-138en-GBClosetfr-FRArmoirenl-NLKastde-DEKleiderschrank
    12-139de-DEKleiderschranknl-NLKasten-GBClosetfr-FRArmoire
    12-140nl-NLStoelen-GBChairde-DEStuhlfr-FRChaise
    12-141nl-NLTafelfr-FRTableaude-DETischen-GBTable
    12-142de-DEStuhlnl-NLStoelen-GBChairfr-FRChaise
    12-143de-DETischen-GBTablefr-FRTableaunl-NLTafel
    12-144fr-FRTabouretnl-NLKruken-GBStoolde-DESchemel
  • RobPastoor's avatar
    RobPastoor
    Regular Visitor
    Article numberValue
    12-125Tafel
    12-126Stoel
    12-127Kast
    12-128Kruk
    12-129Kruk
    12-130Poef
    12-131Poef
    12-132Kruk
    12-133Tafel
    12-134Tafel
    12-135Kast
    12-136Stoel
    12-137Stoel
    12-138Kast
    12-139Kast
    12-140Stoel
    12-141Tafel
    12-142Stoel
    12-143Tafel
    12-144Kruk
  • RobPastoor's avatar
    RobPastoor
    Regular Visitor
    I have added 2 example tables.
    The third table is the desired outcome.
  • dufoq3's avatar
    dufoq3
    Icon for Community Champion rankCommunity Champion

    Hi RobPastoor, 

     

    1. do not split your description and tables to separate posts please. You can edit your post if needed
    2. do not put your description into code just send is as text

    Result

     

    v1 - Simple way

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZRNj4MgEIb/i+eaVHH7cdzvQzcbs91b04PbjpFIJQG97K9faiqOgAs9EQI878zwzhwOUZLGSfoQLaKGxZ8fav0uSmBqPUP88nrdU3mq1ApN/P7Un/8wUGsp4revYV900XFxg63Q4XNVUAmIvm95Tx9o1wsCqe3brmIja42e7grZ4peMS2iR1qO4cCoAwXYM6BmEil8UTT1SNwijAuJsmg7vRA/WwqKrcYinCi6Agtw6Dm0Bg2bpDTiyxDja/tZUSmjQk5x3JRLIOS8RP+dQjrDEczFESsNSd53s3I1cp6XQOOJwneky04VzriNZwGNTbBaG++Fmu2CXWQ7V1JXX93afGI2kWWvHXZNlas2xNnbMrnyNgniajGz/K9G9PT1Qs+Xds2Q27ywJsIRvDmpYGvCZgR+SEa+sK9BpKhqWBQ03c1pZw+74Bw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Article number" = _t, Language1 = _t, Value1 = _t, Language2 = _t, Value2 = _t, Language3 = _t, Value3 = _t, Language4 = _t, Value4 = _t]),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Article number"}, "Attribute", "Value"),
        #"Extracted Text Before Delimiter" = Table.TransformColumns(#"Unpivoted Other Columns", {{"Attribute", each Splitter.SplitTextByCharacterTransition((x)=> not List.Contains({x}, {"0".."9"}), {"0".."9"})(_){0} , type text}}),
        #"Pivoted Column" = Table.Pivot(#"Extracted Text Before Delimiter", List.Distinct(#"Extracted Text Before Delimiter"[Attribute]), "Attribute", "Value", each _),
        #"Added Table" = Table.AddColumn(#"Pivoted Column", "Table", each Table.FromColumns({[Language], [Value]}, {"Language", "Val"}), type table),
        #"Removed Columns" = Table.RemoveColumns(#"Added Table",{"Language", "Value"}),
        #"Expanded Table" = Table.ExpandTableColumn(#"Removed Columns", "Table", {"Language", "Val"}),
        #"Added Value" = Table.AddColumn(#"Expanded Table", "Value", each if [Language] = "nl-NL" then [Val] else null, type text),
        #"Filtered Rows" = Table.SelectRows(#"Added Value", each ([Value] <> null)),
        #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows",{"Language", "Val"})
    in
        #"Removed Columns1"

     

     

    v2 - Elegant

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZRNj4MgEIb/i+eaVHH7cdzvQzcbs91b04PbjpFIJQG97K9faiqOgAs9EQI878zwzhwOUZLGSfoQLaKGxZ8fav0uSmBqPUP88nrdU3mq1ApN/P7Un/8wUGsp4revYV900XFxg63Q4XNVUAmIvm95Tx9o1wsCqe3brmIja42e7grZ4peMS2iR1qO4cCoAwXYM6BmEil8UTT1SNwijAuJsmg7vRA/WwqKrcYinCi6Agtw6Dm0Bg2bpDTiyxDja/tZUSmjQk5x3JRLIOS8RP+dQjrDEczFESsNSd53s3I1cp6XQOOJwneky04VzriNZwGNTbBaG++Fmu2CXWQ7V1JXX93afGI2kWWvHXZNlas2xNnbMrnyNgniajGz/K9G9PT1Qs+Xds2Q27ywJsIRvDmpYGvCZgR+SEa+sK9BpKhqWBQ03c1pZw+74Bw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Article number" = _t, Language1 = _t, Value1 = _t, Language2 = _t, Value2 = _t, Language3 = _t, Value3 = _t, Language4 = _t, Value4 = _t]),
        Transform = Table.FromRows(
           List.TransformMany(Table.ToRows(Source),
                each {List.PositionOf(_, "nl-NL")},
                (x,y)=> {x{0}} & List.Transform({y+1}, (a)=> x{a} ) ),
           type table[Article number=text, Value=text] )
    in
        Transform

     

     

    v3 - Just for fun ๐Ÿ™‚

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZRNj4MgEIb/i+eaVHH7cdzvQzcbs91b04PbjpFIJQG97K9faiqOgAs9EQI878zwzhwOUZLGSfoQLaKGxZ8fav0uSmBqPUP88nrdU3mq1ApN/P7Un/8wUGsp4revYV900XFxg63Q4XNVUAmIvm95Tx9o1wsCqe3brmIja42e7grZ4peMS2iR1qO4cCoAwXYM6BmEil8UTT1SNwijAuJsmg7vRA/WwqKrcYinCi6Agtw6Dm0Bg2bpDTiyxDja/tZUSmjQk5x3JRLIOS8RP+dQjrDEczFESsNSd53s3I1cp6XQOOJwneky04VzriNZwGNTbBaG++Fmu2CXWQ7V1JXX93afGI2kWWvHXZNlas2xNnbMrnyNgniajGz/K9G9PT1Qs+Xds2Q27ywJsIRvDmpYGvCZgR+SEa+sK9BpKhqWBQ03c1pZw+74Bw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Article number" = _t, Language1 = _t, Value1 = _t, Language2 = _t, Value2 = _t, Language3 = _t, Value3 = _t, Language4 = _t, Value4 = _t]),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Article number"}, "Attribute", "Value"),
        #"Extracted Text Before Delimiter" = Table.TransformColumns(#"Unpivoted Other Columns", {{"Attribute", each Splitter.SplitTextByCharacterTransition((x)=> not List.Contains({x}, {"0".."9"}), {"0".."9"})(_){0} , type text}}),
        #"Grouped Rows" = Table.Group(#"Extracted Text Before Delimiter", {"Article number"}, {{"Value", each _{List.PositionOf([Value], "nl-NL")+1}[Value] , type text}})
    in
        #"Grouped Rows"

     

    • RobPastoor's avatar
      RobPastoor
      Regular Visitor

      Hi dufoc3,

      Quit a different approach than what I was trying.
      You solution works, but in the step "Pivoted Column" de values for Language en Value got mixed up, when I try it...
      But I guess I will be able to fix that.

      • dufoq3's avatar
        dufoq3
        Icon for Community Champion rankCommunity Champion

        Hi, have you tried each version of my code? Each one works with sample data. If something doesn't work - post new sample data based on your needs please.