Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
g_reep
New Member

transforming data in M

So currently I have data that is in this format 

 

Heading 1  
Column 1Column 2Column 3Column 4
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
    
Heading 2  
Column 1Column 2Column 3Column 4
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
    
Heading 3  
Column 1Column 2Column 3Column 4
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_RowData_Row
Data_RowData_RowData_Row

Data_Row

 

 

However I want to transform it into data like this

 

Column 1Column 2Column 3Column 4Column 5
Data_RowData_RowData_RowData_RowHeading 1
Data_RowData_RowData_RowData_RowHeading 1
Data_RowData_RowData_RowData_RowHeading 2
Data_RowData_RowData_RowData_RowHeading 2
Data_RowData_RowData_RowData_RowHeading 2
Data_RowData_RowData_RowData_RowHeading 2
Data_RowData_RowData_RowData_RowHeading 2
Data_RowData_RowData_RowData_RowHeading 3
Data_RowData_RowData_RowData_RowHeading 3
Data_RowData_RowData_RowData_RowHeading 3
Data_RowData_RowData_RowData_RowHeading 3
Data_RowData_RowData_RowData_RowHeading 3

 

is that possible to do in DAX or M?

1 ACCEPTED SOLUTION
Ashish_Mathur
Super User
Super User

Hi,

 

On your sample data, this M code works

 

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8khNTMnMS1cwVNJRgqJYnWgl5/yc0tw8sCiUaYRgGiOYJmDVLoklifFB+eVAcQJM0lWjugvmXKPB6tzBoxp7wBmPBhxe1bEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}}),
    #"Replaced Value" = Table.ReplaceValue(#"Changed Type","",null,Replacer.ReplaceValue,{"Column1", "Column2", "Column3", "Column4"}),
    #"Added Custom" = Table.AddColumn(#"Replaced Value", "Custom", each if [Column2]=null then [Column1] else null),
    #"Filled Down" = Table.FillDown(#"Added Custom",{"Custom"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Column2] <> null)),
    #"Promoted Headers" = Table.PromoteHeaders(#"Filtered Rows", [PromoteAllScalars=true]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"Column 1", type text}, {"Column 2", type text}, {"Column 3", type text}, {"Column 4", type text}, {"Heading 1", type text}}),
    #"Filtered Rows1" = Table.SelectRows(#"Changed Type1", each ([Column 1] = "Data_Row")),
    #"Renamed Columns" = Table.RenameColumns(#"Filtered Rows1",{{"Heading 1", "Column 5"}})
in
    #"Renamed Columns"

Hope this helps.

 

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

View solution in original post

1 REPLY 1
Ashish_Mathur
Super User
Super User

Hi,

 

On your sample data, this M code works

 

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8khNTMnMS1cwVNJRgqJYnWgl5/yc0tw8sCiUaYRgGiOYJmDVLoklifFB+eVAcQJM0lWjugvmXKPB6tzBoxp7wBmPBhxe1bEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}}),
    #"Replaced Value" = Table.ReplaceValue(#"Changed Type","",null,Replacer.ReplaceValue,{"Column1", "Column2", "Column3", "Column4"}),
    #"Added Custom" = Table.AddColumn(#"Replaced Value", "Custom", each if [Column2]=null then [Column1] else null),
    #"Filled Down" = Table.FillDown(#"Added Custom",{"Custom"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Column2] <> null)),
    #"Promoted Headers" = Table.PromoteHeaders(#"Filtered Rows", [PromoteAllScalars=true]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"Column 1", type text}, {"Column 2", type text}, {"Column 3", type text}, {"Column 4", type text}, {"Heading 1", type text}}),
    #"Filtered Rows1" = Table.SelectRows(#"Changed Type1", each ([Column 1] = "Data_Row")),
    #"Renamed Columns" = Table.RenameColumns(#"Filtered Rows1",{{"Heading 1", "Column 5"}})
in
    #"Renamed Columns"

Hope this helps.

 

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.