新计算 Table 以每小时拆分持续时间
New Calculated Table to Split Duration Hourly
我有一份包含大量任务的数据表,它们的 start/end 时间、持续时间和开始日期。
Task
Start Time
End Time
Duration
Start Day
Task1
21:00
22:15
1:15
Monday
Task1
21:20
23:30
2:10
Monday
Task2
23:00
23:20
0:20
Tuesday
我想做的是将这些数据放入一个新的计算 table 中,它将拆分每个任务并为每小时花费的分钟数绘制一个新行,具体取决于持续时间。例如:
Task
Hour
Mins in Hour
Start Day
Task1
21
60
Monday
Task1
22
15
Monday
Task1
21
40
Monday
Task1
22
60
Monday
Task1
23
30
Monday
Task2
23
20
Tuesday
我运气不好,有人可以帮忙吗?
可以用 PQ 完成
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("tZg9bhwxDIXv4tqFSEkzs3uHVHFnuDCQVAGSwnCR20cSn2YkhtLsxk5FwP6WoB5/xNHz88PT69sPenh8YHf1TmxYknXuStk+vX9/+/b6++HlUVgWhgpL15ito2twY9a55jcO9oStMQQrBt+z7iJssZoN6W90UWcj+2xgS3zJMvzSxK+rLM7G1tk0i7PxJIbb/W5ytmoddBmwVHORc+746mjMOvh1Hn79iF2vIUK7KPr6YQwr/K435O3fWDkbzmiyC+JNdoVfHrOib7LwO9ZsQe0kPTbosI1ZB78BfoPl17M6XMDhsv3y6+eMdWDdLWybZJNtRLuc+T1Ei4iBJ2wVTdg0TCZsFa1rohM2RmGLPfOLZBRrshFnS5rVYh/6jfAbrwx9eahvw040y2FRQCoO1F+GqEQbJMqcNSPa+1FCrFILZAYQBXXw6tr+0RIodFa54Q63d7MerO/bUrElYSzTLttl7HYDgggYg5cM9CKoU6hVih3K/chT6NKjs0bXKDfD8QSdCFtQXAnZngVwFyopSChipXWIOniNmPnRQDn/jbCjZJYwkqwi2IQVv26qQdklWra9q3Uhlv9hZ0k2TJIrdxL2hWzrfWacTSRq2A3sZrC+YfNoKhNhMSdCaZxb/UbFznRYFDsbCoXFfpPYbi8dsOJ3m2tW2HW/ziSGtGsNYwCb7aR9enZDjsnOsWIdpo23rj4dwywXYB3YWV9olsHyp7Lbfp0E4zoRdpGc7r/BbjxgRYcF+5g9Hnr22B+tntdsjcHfEEOcrQA63vZbacDKrn3EEIzeZKCQV1LMsvbaqEMEVBUzKqdDawBkNrFGUefmjMz/iiq9ZKYXqFeolQWgFFuBcW/YqHiL07mg0boAGC2p0Fk3FBTLXbKxDsdRrFjD8rE2SSwb2SK463PgzRz07HxhEhYLU7Kzk2k2orriMF6vyiuY5SUsQzLee8yad5WVEuD+neOErfGO9W3YUx34yBvOZhV5ZV3s/UbjPtlZxEDreN79xU46XbPTT5MPsLO7p3tT2Fma6Ev7RCDUAxkzl/CVU22duWy0W1Aoj1Ncv53qUAyNNRZTdyyDs6ZYe9RfGjtH6zMWD1D2x1DEq0W5Lb++T9F2MVboRdB9LmBWFatQeY86WHneCGI1Sy1L+xsWGSFQeU9ETyYbWxE0u36AbXv9E9iqR5xkorIOfrs6Vmz4fyjJ0M22fUSzaoF2DQjaBkNbjdZeM0oBKFcU7RmtqmFhyxTdWZKXxBHrYNvbz2SdXNKJpVl2wZavH8bmfuK3vrB3L4mVffkD", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Task " = _t, #"Start Time " = _t, #"End Time " = _t, #"Duration " = _t, #"Start Day" = _t]),
#"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
#"Changed Type" = Table.TransformColumnTypes(#"Added Index",{{"Task ", type text}, {"Start Time ", type time}, {"End Time ", type time}, {"Duration ", type time}, {"Start Day", type text}}),
#"Inserted Time Subtraction" = Table.AddColumn(#"Changed Type", "Subtraction", each [#"End Time "] - [#"Start Time "], type duration),
#"Added Custom" = Table.AddColumn(#"Inserted Time Subtraction", "Custom", each let x = Duration.TotalMinutes([Subtraction]),
y = if x<0 then x*-1 else x in y),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each List.Times([#"Start Time "],[Custom],#duration(0,0,1,0))),
#"Expanded Custom.1" = Table.ExpandListColumn(#"Added Custom1", "Custom.1"),
#"Changed Type1" = Table.TransformColumnTypes(#"Expanded Custom.1",{{"Custom.1", type time}}),
#"Inserted Hour" = Table.AddColumn(#"Changed Type1", "Hour", each Time.Hour([Custom.1]), Int64.Type),
#"Grouped Rows" = Table.Group(#"Inserted Hour", {"Index", "Hour"}, {{"min", each List.Min([Custom.1]), type nullable time}, {"max", each List.Max([Custom.1]), type nullable time}}),
#"Added Custom2" = Table.AddColumn(#"Grouped Rows", "Custom", each Duration.TotalMinutes([max] - [min])+1),
#"Merged Queries" = Table.NestedJoin(#"Added Index", {"Index"}, #"Added Custom2", {"Index"}, "Added Custom2", JoinKind.LeftOuter),
#"Expanded Added Custom2" = Table.ExpandTableColumn(#"Merged Queries", "Added Custom2", {"Hour", "Custom"}, {"Hour", "Custom"}),
#"Removed Other Columns" = Table.SelectColumns(#"Expanded Added Custom2",{"Task ", "Hour", "Custom", "Start Day"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns",{{"Custom", "MinsInHours"}}),
#"Changed Type2" = Table.TransformColumnTypes(#"Renamed Columns",{{"MinsInHours", Int64.Type}})
in
#"Changed Type2"
Edit
相同的代码将适用于添加的任何行
从这里开始
至
我有一份包含大量任务的数据表,它们的 start/end 时间、持续时间和开始日期。
Task | Start Time | End Time | Duration | Start Day |
---|---|---|---|---|
Task1 | 21:00 | 22:15 | 1:15 | Monday |
Task1 | 21:20 | 23:30 | 2:10 | Monday |
Task2 | 23:00 | 23:20 | 0:20 | Tuesday |
我想做的是将这些数据放入一个新的计算 table 中,它将拆分每个任务并为每小时花费的分钟数绘制一个新行,具体取决于持续时间。例如:
Task | Hour | Mins in Hour | Start Day |
---|---|---|---|
Task1 | 21 | 60 | Monday |
Task1 | 22 | 15 | Monday |
Task1 | 21 | 40 | Monday |
Task1 | 22 | 60 | Monday |
Task1 | 23 | 30 | Monday |
Task2 | 23 | 20 | Tuesday |
我运气不好,有人可以帮忙吗?
可以用 PQ 完成
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("tZg9bhwxDIXv4tqFSEkzs3uHVHFnuDCQVAGSwnCR20cSn2YkhtLsxk5FwP6WoB5/xNHz88PT69sPenh8YHf1TmxYknXuStk+vX9/+/b6++HlUVgWhgpL15ito2twY9a55jcO9oStMQQrBt+z7iJssZoN6W90UWcj+2xgS3zJMvzSxK+rLM7G1tk0i7PxJIbb/W5ytmoddBmwVHORc+746mjMOvh1Hn79iF2vIUK7KPr6YQwr/K435O3fWDkbzmiyC+JNdoVfHrOib7LwO9ZsQe0kPTbosI1ZB78BfoPl17M6XMDhsv3y6+eMdWDdLWybZJNtRLuc+T1Ei4iBJ2wVTdg0TCZsFa1rohM2RmGLPfOLZBRrshFnS5rVYh/6jfAbrwx9eahvw040y2FRQCoO1F+GqEQbJMqcNSPa+1FCrFILZAYQBXXw6tr+0RIodFa54Q63d7MerO/bUrElYSzTLttl7HYDgggYg5cM9CKoU6hVih3K/chT6NKjs0bXKDfD8QSdCFtQXAnZngVwFyopSChipXWIOniNmPnRQDn/jbCjZJYwkqwi2IQVv26qQdklWra9q3Uhlv9hZ0k2TJIrdxL2hWzrfWacTSRq2A3sZrC+YfNoKhNhMSdCaZxb/UbFznRYFDsbCoXFfpPYbi8dsOJ3m2tW2HW/ziSGtGsNYwCb7aR9enZDjsnOsWIdpo23rj4dwywXYB3YWV9olsHyp7Lbfp0E4zoRdpGc7r/BbjxgRYcF+5g9Hnr22B+tntdsjcHfEEOcrQA63vZbacDKrn3EEIzeZKCQV1LMsvbaqEMEVBUzKqdDawBkNrFGUefmjMz/iiq9ZKYXqFeolQWgFFuBcW/YqHiL07mg0boAGC2p0Fk3FBTLXbKxDsdRrFjD8rE2SSwb2SK463PgzRz07HxhEhYLU7Kzk2k2orriMF6vyiuY5SUsQzLee8yad5WVEuD+neOErfGO9W3YUx34yBvOZhV5ZV3s/UbjPtlZxEDreN79xU46XbPTT5MPsLO7p3tT2Fma6Ev7RCDUAxkzl/CVU22duWy0W1Aoj1Ncv53qUAyNNRZTdyyDs6ZYe9RfGjtH6zMWD1D2x1DEq0W5Lb++T9F2MVboRdB9LmBWFatQeY86WHneCGI1Sy1L+xsWGSFQeU9ETyYbWxE0u36AbXv9E9iqR5xkorIOfrs6Vmz4fyjJ0M22fUSzaoF2DQjaBkNbjdZeM0oBKFcU7RmtqmFhyxTdWZKXxBHrYNvbz2SdXNKJpVl2wZavH8bmfuK3vrB3L4mVffkD", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Task " = _t, #"Start Time " = _t, #"End Time " = _t, #"Duration " = _t, #"Start Day" = _t]),
#"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
#"Changed Type" = Table.TransformColumnTypes(#"Added Index",{{"Task ", type text}, {"Start Time ", type time}, {"End Time ", type time}, {"Duration ", type time}, {"Start Day", type text}}),
#"Inserted Time Subtraction" = Table.AddColumn(#"Changed Type", "Subtraction", each [#"End Time "] - [#"Start Time "], type duration),
#"Added Custom" = Table.AddColumn(#"Inserted Time Subtraction", "Custom", each let x = Duration.TotalMinutes([Subtraction]),
y = if x<0 then x*-1 else x in y),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each List.Times([#"Start Time "],[Custom],#duration(0,0,1,0))),
#"Expanded Custom.1" = Table.ExpandListColumn(#"Added Custom1", "Custom.1"),
#"Changed Type1" = Table.TransformColumnTypes(#"Expanded Custom.1",{{"Custom.1", type time}}),
#"Inserted Hour" = Table.AddColumn(#"Changed Type1", "Hour", each Time.Hour([Custom.1]), Int64.Type),
#"Grouped Rows" = Table.Group(#"Inserted Hour", {"Index", "Hour"}, {{"min", each List.Min([Custom.1]), type nullable time}, {"max", each List.Max([Custom.1]), type nullable time}}),
#"Added Custom2" = Table.AddColumn(#"Grouped Rows", "Custom", each Duration.TotalMinutes([max] - [min])+1),
#"Merged Queries" = Table.NestedJoin(#"Added Index", {"Index"}, #"Added Custom2", {"Index"}, "Added Custom2", JoinKind.LeftOuter),
#"Expanded Added Custom2" = Table.ExpandTableColumn(#"Merged Queries", "Added Custom2", {"Hour", "Custom"}, {"Hour", "Custom"}),
#"Removed Other Columns" = Table.SelectColumns(#"Expanded Added Custom2",{"Task ", "Hour", "Custom", "Start Day"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns",{{"Custom", "MinsInHours"}}),
#"Changed Type2" = Table.TransformColumnTypes(#"Renamed Columns",{{"MinsInHours", Int64.Type}})
in
#"Changed Type2"
Edit
相同的代码将适用于添加的任何行
从这里开始
至