项目实战案例:将时间段按月拆分并计算各月时长,这个有点儿难,但很有用!

2021-08-31 10:38:15 浏览数 (1)

今年下半年开始,一直在一个数据分析的项目上,所以实在是比较忙,不过,在项目中总是能接触到最前线业务人员的想法和需求,而去满足这些需求的过程,也许是最好的锻炼机会,等项目上线了,得好好抽空做个总结,与大家分享。

下面就是项目中碰到的一个小问题中的一个关键点,独立摘出来做成案例:将一个时间段(可能跨年、跨月等)按月份进行拆分,算出其在每个月里的时长(最终用于计算某个指标的各月的平均作业效率)。

核心步骤添加自定义列通过List.Generate函数来完成,核心思想其实很简单:

从开始时间起,碰到月底就截断,然后用月底的时间点加上1秒得到下月的起点作为新的开始时间,直到结束时间为止。

——对于其中每个参数的赋值要仔细地琢磨一下。

具体代码如下:

代码语言:javascript复制
= Table.AddColumn(更改的类型, "自定义", 
(t)=> List.Generate(
   ()=>[x=t[开始时间],y=Date.EndOfMonth(t[开始时间])],
   each [x]
   each [x=[y], y = Date.EndOfMonth([y] #duration(0,0,0,1))],
   each [开始= [x], 结束 = if [y] >t[结束时间] 
                          then t[结束时间] else [y],
                    间隔 =Duration.TotalDays( 结束 - 开始)]
))

关于List.Generate函数的用法,前面有文章讲到了,比如:

《List.Generate强大到看不懂?把这几个例子练一练就行!》,可以再回去看一下,那里面的例子也是非常的经典,对于理解List.Generate函数,乃至Power Query M语言及函数都非常有帮助!

0 人点赞