Forum Discussion
Need Help! Data transformation
Completely dynamic M
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCk4tKkst8kvMTVWK1YlWcskszoZzHAsKcjKTE0sy8/OUYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Keywords to be searched for" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Keywords to be searched for", type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Keywords to be searched for", "Keywords to be searched for"}})
in
#"Renamed Columns"Table4
let
Source = Web.Page(Web.Contents("https://community.powerbi.com/t5/Desktop/Need-Help-Data-transformation/m-p/650169#M311784")),
Data2 = Source{2}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Data2, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", Int64.Type}, {"COL1", type text}, {"COL1_Value", type text}, {"COL2", type text}, {"COL2_Value", type text}, {"COL3", type text}, {"COL3_Value", type text}}),
Custom1 = Table.DemoteHeaders(#"Changed Type"),
#"Changed Type1" = Table.TransformColumnTypes(Custom1,{{"Column1", type any}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"Column1"}),
#"Transposed Table" = Table.Transpose(#"Removed Columns"),
Custom2 = Table.AlternateRows(#"Transposed Table",1,1,1),
#"Unpivoted Other Columns1" = Table.UnpivotOtherColumns(Custom2, {"Column1"}, "Attribute", "Value"),
Custom3 = Table.AlternateRows(#"Transposed Table",0,1,1),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Custom3, {"Column1"}, "Attribute", "Value"),
#"Replaced Value" = Table.ReplaceValue(#"Unpivoted Other Columns","_Value","",Replacer.ReplaceText,{"Column1"}),
#"Merged Queries" = Table.NestedJoin(#"Replaced Value",{"Column1", "Attribute"},#"Unpivoted Other Columns1",{"Column1", "Attribute"},"Replaced Value",JoinKind.LeftOuter),
#"Expanded Replaced Value" = Table.ExpandTableColumn(#"Merged Queries", "Replaced Value", {"Attribute", "Value"}, {"Attribute.1", "Value.1"}),
#"Removed Other Columns" = Table.SelectColumns(#"Expanded Replaced Value",{"Column1", "Value", "Value.1"}),
#"Grouped Rows" = Table.Group(#"Removed Other Columns", {"Column1"}, {{"AD", each _, type table}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each List.Accumulate(
[AD][Value.1],
"",
(state,current)=> (state &" "& current)
)),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Column1"}),
#"Expanded AD" = Table.ExpandTableColumn(#"Removed Columns1", "AD", {"Column1", "Value", "Value.1"}, {"Column1", "Value", "Value.1"}),
#"Added Custom1" = Table.AddColumn(#"Expanded AD", "Custom.1", each let
CurrentText = [Custom],
Result= Table.SelectRows(Table4,each not Text.Contains(CurrentText, [Keywords to be searched for], Comparer.OrdinalIgnoreCase))
in
Result),
#"Expanded Custom.1" = Table.ExpandTableColumn(#"Added Custom1", "Custom.1", {"Keywords to be searched for"}, {"Keywords to be searched for"}),
#"Added Custom2" = Table.AddColumn(#"Expanded Custom.1", "Custom.1", each if [Value.1]="" and [Keywords to be searched for]<>"" then [Keywords to be searched for] else [Value.1]),
#"Removed Other Columns1" = Table.SelectColumns(#"Added Custom2",{"Column1", "Custom.1", "Value"}),
#"Pivoted Column" = Table.Pivot(#"Removed Other Columns1", List.Distinct(#"Removed Other Columns1"[Custom.1]), "Custom.1", "Value")
in
#"Pivoted Column"Desired Output
I am trying to understand your code. Could you please explain what is Table4 in query.
Result= Table.SelectRows(Table4,each not Text.Contains(CurrentText, [Keywords to be searched for]...
Actually "Added Custom1" step is failing with error "The name Table4 was not recognized".
Please help me to understand and resolved.
Thanks,
Randhir Singh
- smpa017 years agoCommunity Champion
You need to create a query called Table4 with the following code for the output to execute
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCk4tKkst8kvMTVWK1YlWcskszoZzHAsKcjKTE0sy8/OUYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Keywords to be searched for" = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Keywords to be searched for", type text}}), #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Keywords to be searched for", "Keywords to be searched for"}}) in #"Renamed Columns"- parry2k7 years agoSuper User
Anonymous just wondering if you tried the code I posted.
- tex6287 years agoCommunity Champion
Do you want the ID column to just work as an index column in the final table?
- smpa017 years agoCommunity Champion
That's how it would look once you create two queries with the codes that I provided you.Table 2 is the desired output.
- Anonymous7 years agoNot applicable
Hi @smpa01,
Thanks for your time and efforts. This is what I am looking for a dynamic approach. Actually I have total total 40 columns ( COL1,COL_Value, COL2,COL2_Value.... COL20, COL20_Value) .
Your solution is working fine as per sample data posted on web.
But still I am not able to understand how TABLE4 works.
It would be really great if you can explain me working of TABLE4.
Sorry,I am new to Power BI, could you please consider the table below as your Excel source and provide me query.
I'll modify your query for others remaining columns and try at my real data. Please note, given below sample data is containing all the possible scenerios.
ID COL1 COL1_Value COL2 COL2_Value COL3 COL3_Value COL4 COL4_Value COL5 COL5_Value 1 ServerType str6val Application str12val Metric str18val Perimeter str22val SubServerType str1val 2 ServerType str7val ServerType str13val Metric str19val Perimeter str23val SubServerType str2val 3 ServerName str8val ServerName str14val Application str20val Metric str24val SubServerType str3val 4 ServerName str9val ServerName str15val ServerType str21val Application str25val Perimeter str4val 5 ServerName str10val ServerName str16val Metric str5val 6 DiskName str11val ServerName str17val Metric str6val Thanks,
Randhir
- smpa017 years agoCommunity Champion
Table4 is created to replicate this -