领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

区分工作日,你就跟我这样做 区分工作日休息日公式

nixiaole 2024-11-12 13:46:08 知识剖析 19 ℃


各位周二好鸭!

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

1 针对聚合指标

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



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


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

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

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


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

是否工作日 =

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

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

申请单数量(工作日) =

CALCULATE (COUNTROWS ( ‘申请记录’ ),

‘日期表’[是否工作日] = TRUE () )

在报表视图中是:


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

2 针对日期差

数据中有两列日期:申请日期和满足日期。基于业务需要,要计算申请日期和满足日期之间相差的天数,并且剔除非工作日。

首先,如果不考虑工作日的话我们一般使用DATEDIFF函数写如下的表达式来新建列:

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

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


可惜,DATEDIFF函数没有参数可以用来设置工作日,所以我们换一种思路。

上述表达式可以等价地写成:

日期差1 =

CALCULATE ( COUNTROWS ( '日期表' ),

FILTER ( ALL ( '日期表'[Date], '日期表'[是否工作日] ),

'申请记录'[申请日期] <= '日期表'[Date] && '申请记录'[满足日期] >= '日期表'[Date] )) – 1

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


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

工作日差 =

CALCULATE ( COUNTROWS ( '日期表' ),

FILTER ( ALL ( '日期表'[Date], '日期表'[是否工作日] ),

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

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


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

总结

区分工作日首先要做的是在日期表中添加一个辅助列,标识出工作日,本文中的工作日是最简单的情况,如需自定义工作日则要创建自定义的日期表,手工或自动匹配出工作日的标识,再将自定义的日期表导入模型中。

以上,谢谢友友们~


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


延伸阅读:

Power BI可视化:柱形图根据数值自动改变颜色

理解VAR函数

Path函数使用攻略——整理父子级数据同在一列的情况

关于Power BI 中 排名问题的总结

使用Power Query进行模糊匹配




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



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


最近发表
标签列表