这是一种基于 Power Query 的方法...
我是从这个开始的:
然后我通过单击“添加列”选项卡和“自定义列”按钮添加了一个自定义列,并完成如下弹出窗口:
...然后单击“确定”。
然后我通过选择该新列并单击“转换”选项卡,然后单击“数据类型和日期”来更改该新列的类型。
然后我添加了另一个自定义列,像这样完成弹出窗口:
然后我添加了另一个自定义列,像这样完成弹出窗口:
然后我添加了另一个自定义列,完成如下弹出窗口:
然后我通过单击列顶部的 并展开到新行来展开我添加的最后一列。
然后我添加了一个最终的自定义列,像这样完成弹出窗口:
最后,我按 Event、DaysLost、Started 和 Year 列进行分组,并通过单击 Transform 选项卡和 Group By 按钮对 DaysLostForYear 列求和,并完成如下所示的弹出窗口:
我最终得到了这个:
您可能想要一个不同的分组,但这应该会让您接近。它显示了与每次受伤的总损失天数相关的年份中损失了多少天。例如,第一次伤害持续时间为 30 天,从 2016 年 12 月 25 日开始:其中 7 天发生在 2016 年,23 天发生在 2017 年。第二次伤害为 588 天,从 2012 年 8 月 6 日开始:148天数分别是 2012 年、2013 年 365 天和 2014 年 75 天。
请注意,我将开始日期视为丢失的一天。
另请注意,我考虑了闰年。
我希望这会有所帮助。
查询代码如下:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Event", type text}, {"DaysLost", Int64.Type}, {"Started", type date}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Ended", each Date.AddDays([Started],[DaysLost]-1)),
#"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Ended", type date}}),
#"Added Custom3" = Table.AddColumn(#"Changed Type1", "DaysYearStarted", each Number.From(Date.From(Text.From(Date.Year([Started]))&"/12/31")-[Started])+1),
#"Added Custom4" = Table.AddColumn(#"Added Custom3", "DaysYearEnded", each Number.From([Ended]-Date.From(Text.From(Date.Year([Ended])-1)&"/12/31"))),
#"Added Custom5" = Table.AddColumn(#"Added Custom4", "Year", each List.Numbers(Date.Year([Started]),Date.Year([Ended])-Date.Year([Started])+1)),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom5", "Year"),
#"Added Custom1" = Table.AddColumn(#"Expanded Custom", "DaysLostForYear", each if [Year]=Date.Year([Started]) then [DaysYearStarted] else
if [Year]=Date.Year([Ended]) then [DaysYearEnded] else
if Date.IsLeapYear([Year]) then 366 else 365),
#"Grouped Rows" = Table.Group(#"Added Custom1", {"Event", "DaysLost", "Started", "Year"}, {{"DaysLostForYear", each List.Sum([DaysLostForYear]), type number}})
in
#"Grouped Rows"