Forum Discussion
JoMont
1 year agoFrequent Visitor
Group rows with same dates and consecutive dates
Hi, I have data with medical registration numbers, discipline types, start and end dates and FTE equivalent, about medical training placements. There are other columns, but they are not material to ...
- 1 year ago
Hi JoMont,
Hope you are doing well.Open advanced editor in power query and copy paste the below M-code.
Duplicate Entry is removed and all columns are retained.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rZRNbsIwEIWvErEmyJ78LyuKaBdpK1Gpi5ZFGiwUKXFQEpC4Tc/Sk3VMgdgmfyA2yI7w+2bmPfvzcxTOHgmho/FozjgrotQI2SqJE87w01NebpIqSnFpUZMSEwgAbqhjEio2Fm4+HvAnDEOxPpw9/J/S0XJ8VBdHZhkr1ozH+9v1f39knQbGqYO3IoqrJGbNn6griVvEpNDUyTTPsi1PKsGxg4nveNSuadZgGoE+mqPRwJkEgDyV1je/fo6tTe+SY9/Hpw6XRK+v32XFqiKJSyPiK2O+5xGL8zRf71USWCaBAYmQ9L62GARXk7TdCXoHwW1VKGk5V2FfXYUDEyzCd+sq3GGu0jOd2MeBCPrL+z/d1acNNcEbfic8yVXitbgqp5RS/U74d3hDoPUNCQZMS/EKcGP1ZpOohGmacAE3FqzY4WiM52xT5DuWMV5p6fQkefSIuI3vYVLGLE0jzvJt2dDR4BSCBABiEr+J1pdBvdtut4BKGAiO1nW8+FepiyfqLEjtpnvVlgUE1eqLLZpZaOPCWRHoNEcETRw9qfuqem/SFD9oix9q0rT7P4ijSOPqckpwySF4La17cxr6OXKWfw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Medical Registration Number" = _t, #"Discipline Type" = _t, #"Facility Type" = _t, #"Start Date" = _t, #"End Date" = _t, State = _t, MMM = _t, #"Discipline Group" = _t, #"FTE equivalent" = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Medical Registration Number", type text}, {"Discipline Type", type text}, {"Facility Type", type text}, {"Start Date", type date}, {"End Date", type date}, {"State", type text}, {"MMM", type text}, {"Discipline Group", type text}, {"FTE equivalent", type number}}), // Sorting by Medical Registration Number and Start Date is important here. // Without applying sorting logic, sometimes gives you different result. Sort_Logic = Table.Sort(#"Changed Type",{{"Medical Registration Number", Order.Ascending}, {"Start Date", Order.Ascending}}), Duplicate_Logic = Table.Distinct(Sort_Logic, {"Medical Registration Number", "Discipline Type", "Facility Type", "Start Date", "End Date", "State", "Discipline Group", "FTE equivalent"}), Group_Logic_1 = Table.Group(Duplicate_Logic, {"Medical Registration Number", "Discipline Type","Facility Type", "State", "MMM", "Discipline Group"}, {{"AllRows", (x) => x}}, GroupKind.Local), //Assuming your data has continuous date period where a medical number is doing two different placements in the same discipline. // If Date range is not continous, sometimes gives you different result. Transform_Logic = Table.TransformColumns(Group_Logic_1, {{"AllRows", (x) => Table.TransformColumns(x, {{"Start Date", (y) => List.Min(x[Start Date])},{"End Date", (y) => List.Max(x[End Date])}})}}), Combine_Logic = Table.Combine(Transform_Logic[AllRows]), Group_Logic_2 = Table.Group(Combine_Logic, {"Medical Registration Number", "Discipline Type", "Facility Type", "Start Date", "End Date", "State", "MMM", "Discipline Group"}, {{"FTE equivalent", each List.Sum([FTE equivalent]), type nullable number}}), Output = Table.TransformColumnTypes(Group_Logic_2,{{"Medical Registration Number", type text}, {"Discipline Type", type text}, {"Start Date", type date}, {"End Date", type date}, {"FTE equivalent", type number}}) in OutputRegards,
Balakrishnan_J
Did I answer your question? If Yes,
Then mark my post as a solution and click on the Thumbs Up 👍 to give Kudos.
Remember: You can mark multiple answers as a solution...
dufoq3
10 months agoCommunity Champion
Hi JoMont, another solution:
Output
You can delete CHangedTypeEU and ChangedTypeUS steps if you do not need them.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rZGxCoMwEIZfJWQWTS4x6twW6SDt0kkcUj1KQCJoKPj2jVaKdrBLt/9yfB//kbKknAa0OB0Zl8KnHC32uiUFNqY2Fv0TjyPOImAw7SFdDTxMFa2CksIvB2QrTEWMT1lOCjYLxCKQWeLT5T44dL2pB6JtQ/LRaqy7tnuMfpkutHhXY/IzsDCeZfIPMrG44sWlIPPpqv1JepbtNpEzqzbsbg+uVjhAxJIvV7Jxna1DO5gnkoPukdyscRMnNtz6o4BW1Qs=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Index = _t, #"Medical Registration Number" = _t, #"Discipline Type" = _t, #"Start Date" = _t, #"End Date" = _t, #"FTE equivalent" = _t]),
ChangedTypeEU = Table.TransformColumnTypes(Source,{{"Index", Int64.Type}, {"Start Date", type date}, {"End Date", type date}}),
ChangedTypeUS = Table.TransformColumnTypes(ChangedTypeEU,{{"FTE equivalent", type number}}, "en-US"),
GroupedRows = Value.ReplaceType(Table.Combine(Table.Group(ChangedTypeUS, {"Medical Registration Number", "Discipline Type"}, {{"All", each _, type table}, {"T", each Table.FromRecords({_{0} & [Start Date = _{0}[Start Date], End Date = List.Last([End Date]), FTE equivalent = List.Sum([FTE equivalent])]}) , type table}})[T]), Value.Type(Table.FirstN(ChangedTypeUS, 0))),
ReplacedIndex = Table.ReorderColumns(Table.AddIndexColumn(Table.RemoveColumns(GroupedRows,{"Index"}), "Index", 1, 1, Int64.Type), Table.ColumnNames(GroupedRows))
in
ReplacedIndex