技术求助:如何在Power BI中计算销售表内两个日期的差值并排除周末(含示例数据场景)
在Power BI中计算日期差值并排除周末的解决方案
嘿,这个需求我之前帮不少朋友处理过,在Power BI里计算销售表中两个日期的工作日差值(排除周六周日)其实很顺手,我给你配示例数据和具体步骤,你跟着操作就行~
先看示例销售表数据
假设你的销售表结构和数据如下:
| 销售ID | 订单日期 | 发货日期 |
|---|---|---|
| 1 | 2024-05-20 | 2024-05-24 |
| 2 | 2024-05-22 | 2024-05-23 |
| 3 | 2024-05-25 | 2024-05-28 |
方法1:用DAX内置函数NETWORKDAYS(最简便)
Power BI的DAX语言里专门有个NETWORKDAYS函数,就是用来计算两个日期之间的工作日数量,默认会排除周六和周日。
步骤:添加计算列
- 打开你的销售表,点击「建模」选项卡 → 「新建列」
- 输入以下DAX公式:
工作日差值 = NETWORKDAYS('销售表'[订单日期], '销售表'[发货日期])
- 按回车确认,就能看到每一行的工作日差值了。
对应示例的计算结果:
- 销售ID1:5天(5.20周一到5.24周五,全是工作日)
- 销售ID2:2天(5.22周三到5.23周四)
- 销售ID3:2天(5.25周六、5.26周日排除,实际计算5.27周一到5.28周二)
进阶:排除自定义节假日
如果你的业务需要排除特定节假日(比如国庆、春节),可以先建一个包含节假日日期的表,然后给NETWORKDAYS加第三个参数:
工作日差值(含节假日排除) = NETWORKDAYS('销售表'[订单日期], '销售表'[发货日期], '节假日表'[节假日日期])
处理日期顺序问题
如果存在「发货日期早于订单日期」的异常数据,函数会返回负数,你可以用ABS函数取绝对值:
工作日差值 = ABS(NETWORKDAYS('销售表'[订单日期], '销售表'[发货日期]))
方法2:用度量值计算(适合汇总场景)
如果你需要对整个销售表的工作日差值做汇总计算,可以新建度量值:
总工作日差值 = SUMX('销售表', NETWORKDAYS('销售表'[订单日期], '销售表'[发货日期]))
这个度量值会遍历每一行销售数据,计算单条记录的工作日差值后求和。
注意事项
- 确保你的「订单日期」和「发货日期」列是日期/时间格式,要是文本格式的话,函数会报错,记得先转格式哦~
NETWORKDAYS默认包含开始日期和结束日期,如果不需要包含其中某一天,可以对日期做±1调整,比如NETWORKDAYS('销售表'[订单日期]+1, '销售表'[发货日期])就会排除订单当天。
内容的提问来源于stack exchange,提问作者Jeje




