Forum Discussion
beginner
Helper I
3 years agoHow to calculate dates using start and end date distribute per month
I would like to calculate dates per location and sum the date count per calendar month. When there is no end date I want to keep counting and distrubute it per month. IncidentID|Lost work start|...
- 3 years ago
OK, here is a method using Power Query M Code (which I just happened to develop earlier for a similar problem).
Home =>Trnasform data=>Advanced Editor and paste the code into the window that opens (deleting whatever might be there)
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTLUN9I3MjAyAjONYUy/1HKFyPyibKVYHZgyU5hcXmlODroSkDjQHLhRQIY5jB2Sn52ZD1dljKTKBImNqgooA7fPXB9dUSwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [IncidentID = _t, #"Lost work start" = _t, #"lost work end" = _t, Location = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"IncidentID", Int64.Type}, {"Lost work start", type date}, {"lost work end", type date}, {"Location", type text}}), //Create all months list #"Last Day" = Date.From(DateTime.FixedLocalNow()), #"all Dates" = List.Dates( List.Min(#"Changed Type"[Lost work start]), Duration.Days(#"Last Day"-List.Min(#"Changed Type"[Lost work start])) + 1, #duration(1,0,0,0)), #"all MnthYr" = List.Distinct(List.Transform(#"all Dates", each Date.ToText(_,"yyyy-MM"))), //List of Dates for each row #"Days per Month" = Table.AddColumn(#"Changed Type", "Dates List", each let LWD = List.Dates( [Lost work start], Duration.Days(List.Min({[lost work end], #"Last Day"}) - [Lost work start]) + 1, #duration(1,0,0,0)), MnthYr = List.Transform(LWD, each Date.ToText(_,"yyyy-MM")), //Group by MnthYr and count Group = Table.Group(Table.FromColumns({MnthYr} & {LWD}),{"Column1"},{ {"Days in Month", each Table.RowCount(_), Int64.Type}}), Pivot = Table.Pivot(Group,List.Sort(Group[Column1]),"Column1","Days in Month") in Pivot), #"Expanded Dates List" = Table.ExpandTableColumn(#"Days per Month", "Dates List", #"all MnthYr"), #"Sort Month/Year Columns" = let colsToSort = List.RemoveFirstN(Table.ColumnNames(#"Expanded Dates List"),4), #"Sorted Order" = List.Sort(colsToSort), #"Reorder Columns" = Table.ReorderColumns(#"Expanded Dates List",#"Sorted Order") in #"Reorder Columns", #"Month To Name" = Table.RenameColumns(#"Sort Month/Year Columns", List.Transform(List.RemoveFirstN(Table.ColumnNames(#"Sort Month/Year Columns"),4), each{_, Date.ToText(Date.From(_),"MMM-yy")})), #"Grouped Rows1" = Table.Group(#"Month To Name", {"Location"}, { //Sum each month {"Sum Each Month", (t)=> Record.FromList( List.Accumulate(List.RemoveFirstN(Table.ColumnNames(t),4),{}, (a,b)=> a & {List.Sum(Table.Column(t,b))}), List.RemoveFirstN(Table.ColumnNames(t),4)) }}), #"Expanded Sum Each Month" = Table.ExpandRecordColumn(#"Grouped Rows1", "Sum Each Month", List.RemoveFirstN(Table.ColumnNames(#"Month To Name"),4)), #"Typed" = Table.TransformColumnTypes(#"Expanded Sum Each Month", List.Transform(List.RemoveFirstN(Table.ColumnNames(#"Expanded Sum Each Month")), each {_, Int64.Type})) in #"Typed"Results:
beginner
Helper I
3 years agoronrsnfld Hi! Is it all possible to identify distrubition of lost work days per incident for the total number of lost work days? I had doubts since logic was grouping lost work days per month. I have tried to keep incident IDs but it didn't work.
ronrsnfld
Super User
3 years agoNot at my computer to test but maybe also group by incident