EARLIER函数精细化计算行间差

EARLIER函数精细化计算行间差_第1张图片

​工坊的小伙伴们大家好,今天我们来研究一下EARLIER函数。诚如赵老师所言, EARLIER函数是 Power BI 建模分析的分水岭,理解它的作用机制我们建模分析的能力将会得到很大提升。今天我们结合实例来学习一下earlier函数按照不同规则计算行间差的方法。

手上有这样的一组数据:

EARLIER函数精细化计算行间差_第2张图片

​我们来分别看公司整体相邻两件产品生产时间间隔的分布,各车间产品生产时间间隔的分布,每个车间员工生产两条产品的时间间隔的分布。


公司整体层面


我们的想法是计算相邻两条记录之间的时间差。为了便于理解,我们先把生产时间列按照降序排序,之后添加辅助列,点击建模栏的新建列,我们为生产时间列添加序号列,

EARLIER函数精细化计算行间差_第3张图片

​因为是看总体的情况,所以“序号1”列是该行的生产时间在所有记录中的序号,

接下来我们再用如下公式新建一列:

生产时间1 = SUMX(FILTER('生产记录表','生产记录表'[序号1]=EARLIER('生产记录表'[序号1])+1),'生产记录表'[生产时间])

EARLIER函数精细化计算行间差_第4张图片

​我们从得到的结果来反向理解一下该表达式的含义,仔细观察可以发现,‘生产时间1’列是原来的‘生产时间’列整体向上移动了一行得到的,

公式的逻辑:对于每个序号来说,去找到原来的表中该序号加一的序号对应的生产时间,也就是生产时间相邻的前一条记录,这样的话我们通过两列做差即可得到相邻两条记录的时间差了。这里我推荐大家使用DATEDIFF函数,可以通过修改函数的最后一个参数得到想要的时间粒度。

时间差1 = DATEDIFF('生产记录表'[生产时间1],'生产记录表'[生产时间],SECOND)

EARLIER函数精细化计算行间差_第5张图片

​至此我们得到了一列相邻两行的时间差数据,稍后我们通过作图来分析时间差的分布情况。


公司内各车间层面


我们的想法是计算同一个车间的相邻两条生产记录之间的时间差。同样,我们先给生产时间添加序号,而与上节不同的是,我们是给每个车间的生产时间分别编号,此时我们用的表达式为:

序号2 = RANKX(FILTER('生产记录表','生产记录表'[车间]=EARLIER('生产记录表'[车间])),'生产记录表'[生产时间])

EARLIER函数精细化计算行间差_第6张图片

接下来,同样是新建一列生产时间,每行都是原来的生产时间在对应车间内的前一条记录的生产时间。表达式为:

生产时间2 = SUMX(FILTER('生产记录表','生产记录表'[车间]=EARLIER('生产记录表'[车间])&&'生产记录表'[序号2]=EARLIER('生产记录表'[序号2])+1),'生产记录表'[生产时间])

该表达式相对于‘生产时间1’多了一个限制条件,即相同车间的限制。

EARLIER函数精细化计算行间差_第7张图片

接下来,同样使用DATEDIFF函数计算同车间相邻两条记录的时间差:

时间差2 = DATEDIFF('生产记录表'[生产时间2],'生产记录表'[生产时间],SECOND)

稍后我们来作图分析时间差的分布。


每个员工生产两件产品的时间间隔


延续之前的思路,我们新建一列序号列,这次排序的条件是相同车间的相同员工,这里我们只贴出表达式,相信大家已经有一定的理解了。

序号3 = RANKX(FILTER('生产记录表','生产记录表'[车间]=EARLIER('生产记录表'[车间])&&'生产记录表'[员工编号]=EARLIER('生产记录表'[员工编号])),'生产记录表'[生产时间])

接下来同样是新建一列生产时间,只不过这次的限制条件是相同车间的同一名员工,

生产时间3 = SUMX(FILTER('生产记录表','生产记录表'[车间]=EARLIER('生产记录表'[车间])&&'生产记录表'[员工编号]=EARLIER('生产记录表'[员工编号])&&'生产记录表'[序号3]=EARLIER('生产记录表'[序号3])+1),'生产记录表'[生产时间])

之后用DATEDIFF函数计算两列时间的差:

时间差3 = DATEDIFF('生产记录表'[生产时间3],'生产记录表'[生产时间],SECOND)

至此我们得到了三列时间差,下面分析时间差的分布情况。我的想法是为时间差分组,感谢@叶婷的方法,我们可以通过如下方式来较为轻松的为多列数值分组。

首先,我们建立一个参数表,表中是各组名称和区间

EARLIER函数精细化计算行间差_第8张图片

然后,以‘时间差1’列为例:

分组1 = CALCULATE(VALUES('分组参数'[区间]),FILTER('分组参数','分组参数'[最小值]<='生产记录表'[时间差1]&&'分组参数'[最大值]>='生产记录表'[时间差1]))

然后根据得到的分组列我们做出如下的条形图:

EARLIER函数精细化计算行间差_第9张图片

经过类似操作我们得到各车间和各员工的生产时间间隔分布条形图:

EARLIER函数精细化计算行间差_第10张图片


EARLIER函数精细化计算行间差_第11张图片

嗯呐,今天的分享就到这里啦,能看到这里的都是真爱呀,么么哒bye ~

EARLIER函数精细化计算行间差_第12张图片

*Power Pivot工坊原创文章,转载请注明出处。


 延伸阅读:

工坊实验室之CLOSINGBALANCE家族

参数表第三弹—最近N天的实现

工坊实验室之部分切片的实现

Power BI 也能做这样的组合图?

工坊实验室之失灵的筛选

工坊实验室之R脚本视觉对象

工坊实验室之数据标签的位置

工坊实验室之桑基图排序

工坊实验室之流向图展现

 工坊实验室之使用瀑布图

一张图看懂微软PowerBI系列组件

 一张图看懂Power BI 架构

 当Power BI 遇上洪灾

当Power BI 遇上欧冠决赛

 当Power BI遇上条形码

 当Power BI遇上Visio


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

EARLIER函数精细化计算行间差_第13张图片

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

EARLIER函数精细化计算行间差_第14张图片

你可能感兴趣的:(EARLIER函数精细化计算行间差)