Forum Discussion
Help me with transform data - create new column (Milestone - M1,M2....M8,M9)
- 1 year ago
Please try this:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rdPdboIwFAfwVznh2oRSwbHdGfblhZsJJmQxXnR4iJ2VmrZz8218Fp9sBcVFcREzk17ACfz+J6ftaOTEb/ekHRJCnZYTG6YM9LlAbWSOthLJ3CiWGuh+MTWxBa/jktClhPpA7gixFbv6njNunaPiJIKe1p8IiVQzDUbCQMkUsWR91yM1ljZgbYcZV3NmuMxBZqC5QchYygU3HLX9goan7HYD+0khWh3FRENcuJFgWvOMp9u49xW8SGWm8IxsAkkyHPwZ5zeZUFmxbpFVDIW6dh1LQU165DnX06OpzBcCq5lEiuUIvVwbJkTZ+taixCVeEdCpAvqdy/WH75Qt9/OP2BJV5XuuV/rB3r9p4r8uUJUgE/CbtTNpreewiWnP2gfag1zzApfQQ++25g2Znm3W9qGbGr7kZgXeZl0Wduv8D0WVVL0HxYsNDqqXA8C/3lU8Tf37KvpX2bd2E/OCfbN3bPwD", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Project ID " = _t, #"Activity Type" = _t, #"Milestone Defination" = _t, #"BL Project Start" = _t, #"BL Project Finish" = _t, #"Milestone " = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Milestone Defination", type text}, {"BL Project Start", type datetime}, {"BL Project Finish", type datetime}, {"Milestone ", type text}}, "en-au"), #"Added Custom" = Table.AddColumn(#"Changed Type", "Date", each if [Activity Type] = "Start Milestone" or [Activity Type] = "Finish Milestone" then [BL Project Start]??[BL Project Finish] else #datetime(2200, 5, 2, 0, 0, 0), type date), #"Sorted Rows" = Table.Buffer(Table.Sort(#"Added Custom",{{"Date", Order.Ascending}})), #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Project ID "}, {{"Grouped", each _, type table [#"Project ID "=nullable text, Activity Type=nullable text, Milestone Defination=nullable text, BL Project Start=nullable datetime, BL Project Finish=nullable datetime, #"Milestone "=nullable text, Date=date]}}), #"Added Custom1" = Table.AddColumn(#"Grouped Rows", "Added Index", each Table.AddIndexColumn([Grouped], "Index", 1,1)), #"Expanded Added Index" = Table.ExpandTableColumn(#"Added Custom1", "Added Index", {"Activity Type", "Milestone Defination", "BL Project Start", "BL Project Finish", "Milestone ", "Date", "Index"}, {"Activity Type", "Milestone Defination", "BL Project Start", "BL Project Finish", "Milestone ", "Date", "Index"}), #"Removed Columns" = Table.RemoveColumns(#"Expanded Added Index",{"Grouped"}), #"Added Custom2" = Table.AddColumn(#"Removed Columns", "Milesone", each if [Activity Type] = "Start Milestone" or [Activity Type] = "Finish Milestone" then "M" & Text.From([Index]) else null), #"Replaced Value" = Table.ReplaceValue(#"Added Custom2",#datetime(2200, 5, 2, 0, 0, 0),null,Replacer.ReplaceValue,{"Date"}) in #"Replaced Value"
Hi ashmitp869
Create a custom column to coalesce BL Project Start and BL Project End
[BL Project Start]??[BL Project Finish]
Arrange the newly added column in ascending order and then wrap the step using Table.Buffer. This ensures the sorting is retained in memory; otherwise, when you load the query, the records will be arranged based on their original sequence in the data source.
= Table.Buffer(Table.Sort(#"Added Custom",{{"Date", Order.Ascending}}))
Add an Index column starting 1 and create another custom column.
= Table.AddColumn(#"Added Index", "Milestone", each "M" & Text.From([Index]))
Here's the full M
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("dZHBTsMwDIZfxcp5UtLQlsINVQh2GEwaUg9TD6Z1RSBrpiQMeHvSdB2CDsmnyN/32/F2y0rTe4uNh5sPtC1bsCTnouBSyBTEtRDhJdQqYfViyzZVCUvn3gkqY98ceANraxqiCKY8ETNQRjCkdMru0CvTg+nAKU/QYaO08opcaJTFOfoi0neWKPCkWwebgSw1Oqc61YzC5y94MNa/wD1hC1X1tP5XmI57eLQeAjnYhtElD/W3NzuOvttrmgYvLfYEy9551Dqmj81ScJEMhnwyrPIz+O1ng4fTL5R4IDsJEp5EQXYSXEbB455sJFDDj+wIyVlqEaFwlVcKR50BGRfyN3DF6vob", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Milestone Defination" = _t, #"BL Project Start" = _t, #"BL Project Finish" = _t, #"Milestone " = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Milestone Defination", type text}, {"BL Project Start", type datetime}, {"BL Project Finish", type datetime}, {"Milestone ", type text}}, "en-au"),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Date", each [BL Project Start]??[BL Project Finish], type date),
#"Sorted Rows" = Table.Buffer(Table.Sort(#"Added Custom",{{"Date", Order.Ascending}})),
#"Added Index" = Table.AddIndexColumn(#"Sorted Rows", "Index", 1, 1, Int64.Type),
#"Added Custom1" = Table.AddColumn(#"Added Index", "Milestone", each "M" & Text.From([Index]), type text)
in
#"Added Custom1"
- ashmitp8691 year ago
Responsive Resident
Hi danextian ,
Thanks for the above solution.
After doing your recomended steps - I realised that I missed two columns to bring into consideration.
Project ID and Activity Type.
I am expecting the below results -
The index should work when Actvity Type is "Start Milestone" and "Finish Milestone" against each Project IDProject ID Activity Type Milestone Defination BL Project Start BL Project Finish Milestone SYD038002 Start Milestone Contract Award 16/08/2024 0:00 M1 SYD038002 Start Milestone SWC Issue Works to Proceed 14/10/2024 0:00 M2 SYD038002 Start Milestone Confirmation of site facilities 28/10/2024 0:00 M3 SYD038002 Start Milestone Greenfields Site Classification by North Head WWTP 28/10/2024 0:00 M4 SYD038002 Start Milestone Start on Site 12/12/2024 0:00 M5 SYD038002 Finish Milestone Completion of Crane Installation 20/01/2026 0:00 M6 SYD038002 Finish Milestone Completion of Excavation of Cavern 21/11/2025 0:00 M7 SYD038002 Finish Milestone Operational Completion 22/01/2026 0:00 M8 SYD038002 Finish Milestone Project Completion 25/02/2026 0:00 M9 SYD038002 Task Activity 1 SYD038002 Task Activity 2 2/01/2025 5/05/2025 SYD038004 Start Milestone Contract Award 16/08/2024 0:00 M1 SYD038004 Start Milestone SWC Issue Works to Proceed 14/10/2024 0:00 M2 SYD038004 Finish Milestone Operational Completion 22/01/2026 0:00 M3 SYD038004 Finish Milestone Project Completion 25/02/2026 0:00 M4 - danextian1 year ago
Super User
Please try this:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rdPdboIwFAfwVznh2oRSwbHdGfblhZsJJmQxXnR4iJ2VmrZz8218Fp9sBcVFcREzk17ACfz+J6ftaOTEb/ekHRJCnZYTG6YM9LlAbWSOthLJ3CiWGuh+MTWxBa/jktClhPpA7gixFbv6njNunaPiJIKe1p8IiVQzDUbCQMkUsWR91yM1ljZgbYcZV3NmuMxBZqC5QchYygU3HLX9goan7HYD+0khWh3FRENcuJFgWvOMp9u49xW8SGWm8IxsAkkyHPwZ5zeZUFmxbpFVDIW6dh1LQU165DnX06OpzBcCq5lEiuUIvVwbJkTZ+taixCVeEdCpAvqdy/WH75Qt9/OP2BJV5XuuV/rB3r9p4r8uUJUgE/CbtTNpreewiWnP2gfag1zzApfQQ++25g2Znm3W9qGbGr7kZgXeZl0Wduv8D0WVVL0HxYsNDqqXA8C/3lU8Tf37KvpX2bd2E/OCfbN3bPwD", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Project ID " = _t, #"Activity Type" = _t, #"Milestone Defination" = _t, #"BL Project Start" = _t, #"BL Project Finish" = _t, #"Milestone " = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Milestone Defination", type text}, {"BL Project Start", type datetime}, {"BL Project Finish", type datetime}, {"Milestone ", type text}}, "en-au"), #"Added Custom" = Table.AddColumn(#"Changed Type", "Date", each if [Activity Type] = "Start Milestone" or [Activity Type] = "Finish Milestone" then [BL Project Start]??[BL Project Finish] else #datetime(2200, 5, 2, 0, 0, 0), type date), #"Sorted Rows" = Table.Buffer(Table.Sort(#"Added Custom",{{"Date", Order.Ascending}})), #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Project ID "}, {{"Grouped", each _, type table [#"Project ID "=nullable text, Activity Type=nullable text, Milestone Defination=nullable text, BL Project Start=nullable datetime, BL Project Finish=nullable datetime, #"Milestone "=nullable text, Date=date]}}), #"Added Custom1" = Table.AddColumn(#"Grouped Rows", "Added Index", each Table.AddIndexColumn([Grouped], "Index", 1,1)), #"Expanded Added Index" = Table.ExpandTableColumn(#"Added Custom1", "Added Index", {"Activity Type", "Milestone Defination", "BL Project Start", "BL Project Finish", "Milestone ", "Date", "Index"}, {"Activity Type", "Milestone Defination", "BL Project Start", "BL Project Finish", "Milestone ", "Date", "Index"}), #"Removed Columns" = Table.RemoveColumns(#"Expanded Added Index",{"Grouped"}), #"Added Custom2" = Table.AddColumn(#"Removed Columns", "Milesone", each if [Activity Type] = "Start Milestone" or [Activity Type] = "Finish Milestone" then "M" & Text.From([Index]) else null), #"Replaced Value" = Table.ReplaceValue(#"Added Custom2",#datetime(2200, 5, 2, 0, 0, 0),null,Replacer.ReplaceValue,{"Date"}) in #"Replaced Value"- ashmitp8691 year ago
Responsive Resident
Hi danextian
I am still struggling.
Providing you a sample file.
https://github.com/suvechha/samplepbi/blob/main/p6%20(1)%20(1).pbix
What I am gettingExpected Result