ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11537|回复: 10

[求助] power query根据起始日和工作日天数计算结束日期

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-21 16:22 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求助大神,如何用power query计算工作的结束日期!

已知起始日期为2018-08-01,经历3个工作日后为2018-08-06,如何用power query实现这样的计算结果?谢谢!

TA的精华主题

TA的得分主题

发表于 2018-12-21 17:32 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 PQ小学生 于 2018-12-21 17:34 编辑

你的意思是讲,如果当天的三天后是周六或是周天就顺延至最近的下一个工作日对不对?如果是这样的话,先由当前日期生成所在周周末的日期,然后两个日期相减确定出差值。差值为3的就是加4天,差值为四的就是加5天。用到的函数为Date.AddDays() 希望能帮到你

TA的精华主题

TA的得分主题

发表于 2018-12-21 17:36 来自手机 | 显示全部楼层
或者也不用求周末日期 直接转换出当天的是星期几的话 按条件加相应天数,周三就加五 周四就加四 其他加三 更便捷一些

TA的精华主题

TA的得分主题

发表于 2018-12-21 17:38 来自手机 | 显示全部楼层
或者不用求周末日期 直接转换出日期是周几也行 周三加五 周四加四 其余加三 更便捷

TA的精华主题

TA的得分主题

发表于 2018-12-22 17:41 | 显示全部楼层
如果不考虑法定假日和周末调班的那种,比如国庆节七天调休那样的情况。只跳过周末双休,可以试试这几个。我从畅心大神那里学来的。
1、迭代
  1. = let fx=(x,y)=>List.Accumulate({1..y},x,(s,c)=>Date.AddDays(s,List.Max({1,3-Date.DayOfWeek(s,5)})))
  2.   in fx(#date(2018,8,1),3)
复制代码
2、递归
  1. = let fx=(x,y)=>if y=0 then x else @fx(Date.AddDays(x,1),y-Byte.From(Date.DayOfWeek(x,5)>1))
  2.   in fx(#date(2018,8,1),3)
复制代码
3、序列构造,依据星期几找规律
  1. = let fx=(x as date,y as number)=>
  2.                                          Date.AddDays( x,
  3.                                                        List.Skip( List.Alternate( {1..21},
  4.                                                                                    2,
  5.                                                                                    5,
  6.                                                                                    6-Date.DayOfWeek(x,6)
  7.                                                                                  ),
  8.                                                                    Byte.From(Date.DayOfWeek(x,0)=6) ){y-1} )
  9.    in fx(#date(2018,8,1),3)
复制代码
如果考虑中国式放假,周末调班的算工作日,法定假日不算工作日。那事先要做一个假日表和调班表
  1. let
  2.     假日 = Table.TransformColumns(Excel.CurrentWorkbook(){[Name="假日"]}[Content],{},Date.From)[假日],  //制作某年度内的法定假日表

  3.     调班 = Table.TransformColumns(Excel.CurrentWorkbook(){[Name="调班"]}[Content],{},Date.From)[调班], //制作某年度内的周末调班表
  4.    
  5.     Date.AfterWorkDays = let
  6.                              fx=(x,y)=>
  7.                                        if   y=0
  8.                                        then x
  9.                                        else @fx( Date.AddDays(x,1),
  10.                                                  y-( if List.Contains(调班,Date.AddDays(x,1)) then 1 else
  11.                                                      if List.Contains(假日,Date.AddDays(x,1)) then 0 else
  12. Byte.From(Date.DayOfWeek(x,5)>1) ) )
  13.                           in fx,

  14.     test = Date.AfterWorkDays(#date(2018,9,27),3)
  15. in
  16.     test
复制代码


评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-12-22 17:45 | 显示全部楼层
假日
2017/12/30
2017/12/31
2018/1/1
2018/2/15
2018/2/16
2018/2/17
2018/2/18
2018/2/19
2018/2/20
2018/2/21
2018/4/5
2018/4/6
2018/4/7
2018/4/29
2018/4/30
2018/5/1
2018/6/16
2018/6/17
2018/6/18
2018/9/22
2018/9/23
2018/9/24
2018/10/1
2018/10/2
2018/10/3
2018/10/4
2018/10/5
2018/10/6
2018/10/7

调班
2018/2/11
2018/2/24
2018/4/8
2018/4/28
2018/9/29
2018/9/30




TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-24 17:32 | 显示全部楼层
飞天篮球猪 发表于 2018-12-22 17:41
如果不考虑法定假日和周末调班的那种,比如国庆节七天调休那样的情况。只跳过周末双休,可以试试这几个。我 ...

太感谢了!

TA的精华主题

TA的得分主题

发表于 2019-5-21 11:24 | 显示全部楼层
飞天篮球猪 发表于 2018-12-22 17:41
如果不考虑法定假日和周末调班的那种,比如国庆节七天调休那样的情况。只跳过周末双休,可以试试这几个。我 ...

太详细了,赞

TA的精华主题

TA的得分主题

发表于 2019-6-10 12:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-10 15:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2种解决方案,一种通过计算日期的函数进行加一天,例如用到Date.AddDays,另一种方式就是把数字1改成持续时间格式,就会用到Duration.From这个函数。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 16:20 , Processed in 0.044760 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表