区分工作日,你就跟我这样做

各位周三好鸭!

大家在工作中有没有经常遇到一种情况 ☛ 统计某些指标时需剔除非工作日。下面我们分两种情景来探讨下分析中遇到区分工作日的场景。


1 针对聚合指标

我们采用如下数据,以下申请记录表是某厂的设备借用申请记录,每个单子均有申请借用的日期和申请被满足的日期:

file

我们要按照申请日期统计每天产生的申请单数量,建立或导入日期表如下:

file

将申请记录表的申请日期和日期表的Date列建立关系。要统计每天产生的申请单数量,只需写出如下表达式:

申请单数量 =COUNTROWS ( '申请记录' )

则在报表视图中,呈现的结果如下:

file

考虑工作日进来,实现只统计工作日的申请单数量。这里我们只考虑周末为非工作日,在日期表中增加辅助列:

是否工作日 =
IF ( '日期表'[星期几] = 6 || '日期表'[星期几] = 7, FALSE (), TRUE () )

file

根据该辅助列改写一下刚才的度量值:

申请单数量(工作日) =
CALCULATE (COUNTROWS ( ‘申请记录’ ), 
‘日期表’[是否工作日] = TRUE () )

在报表视图中是:

file

可以看到,非工作日已经被过滤。

2 针对日期差

数据中有两列日期:申请日期和满足日期。基于业务需要,要计算申请日期和满足日期之间相差的天数,并且剔除非工作日。
首先,如果不考虑工作日的话我们一般使用DATEDIFF函数写如下的表达式来新建列:

日期差 =DATEDIFF ( [申请日期], [满足日期], DAY )

在数据视图中的结果如下:

file

可惜,DATEDIFF函数没有参数可以用来设置工作日,所以我们换一种思路。
上述表达式可以等价地写成:

日期差1 = 
CALCULATE ( COUNTROWS ( '日期表' ), 
FILTER ( ALL ( '日期表'[Date], '日期表'[是否工作日] ), 
'申请记录'[申请日期] <= '日期表'[Date] && '申请记录'[满足日期] >= '日期表'[Date] )) – 1

以上表达式可以理解为,统计日期表中在申请日期之后,满足日期之前的日期数量,在报表视图中的结果如下:

file

如果只统计工作日,那么只需在以上逻辑的基础上添加 '日期表'[是否工作日] = TRUE ()的条件,如下:

工作日差 =
CALCULATE ( COUNTROWS ( '日期表' ), 
FILTER ( ALL ( '日期表'[Date], '日期表'[是否工作日] ), 
申请记录'[申请日期] <= '日期表'[Date] && '申请记录'[满足日期] >= '日期表'[Date] &&  '日期表'[是否工作日] = TRUE () )) – 1

在数据视图中的结果如下:

file

可以看到,“工作日差”列只统计了两个日期之间的工作日天数,达到了预期的效果。

file

以上,谢谢友友们~


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

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

file


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

Power Pivot工坊