M 语言 | 生成给定时间范围内的每秒状态

本期重点::
生成给定的两个日期时间之间的所有日期时间
两个M函数:Duration.TotalSeconds和List.Duration

小伙伴们好啊。
日常工作中我们经常要在Power Query里对不规范的数据进行清洗加工,再加载到模型中进行处理。一起来看一个场景,截图如下:

file

上图中的数据,对应了某机器(数据类型编号)在开始时间和结束时间内的机器状态。显然,这个数据不够规范,我们希望能够获得一张二维表记录该机器在开始时间和结束时间内的每一秒的机器状态。在Power Query中我们需要对数据怎样做处理呢。
为方便演示,我们选取其中一行数据:

file

最终要达到的效果图如下:

file

第一步:计算两个日期时间之间的秒数

两个日期时间的差值(Duration)很容易获取,用结束时间减去开始时间即可。问题在于如何把这个持续时间转换成秒数呢。在M语言中有大量的时间函数可直接调用,这里我们用的函数是Duration.TotalSecond,可直接用来计算两个日期时间相差的秒数:

file

第二步:生成一个从0秒开始到最后秒数的所有时间列表

file

这里我们采用List.Duration函数。简单描述一下该函数:一共有三个参数(start as dutation,count as number,step as duration)。一参给定一个持续时间(0秒),二参指定增量的次数(第一步中的秒数),三参给定每次的增量(1秒)。该代码执行后,将生成从0秒到11秒中的所有持续时间。

第三步:展开第二步中的List,用这个List中的每个持续时间和开始时间相加即可

file

最后删除不需要的列,修改下数据类型,就得到了最开始的效果图。这个过程相信大家都很熟悉,不做赘述。
当然,这里有更简单的方式。用List.Generate实现,可以省去很多中间步骤,但是该函数上手有难度,有余力的小伙伴可以先动手尝试。我们会在以后的文章中接着讨论。
今天的分享就到这里,祝大家学习愉快,下次见!

  • PowerPivot工坊原创文章,转载请注明出处!

    如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊