PowerQuery如何基于已关联表新建计算列 计算含节假日的6工作日后到货日期
PowerQuery 计算排除周末/法定节假日的到货日期实现步骤
首先确认3张表的基础配置符合要求:
- 日历表(建议命名为
日历表)包含连续无中断的日期列(列名日期),以及标识是否为周末的布尔列(列名IsWeekend,周末取值true,工作日取值false) - 国家法定节假日表(建议命名为
法定节假日表)包含所有法定节假日的日期列(列名节假日日期) - ORDER表(建议命名为
订单表)包含发货日期列,且你已完成3张表的关联配置
具体操作步骤
- 首先生成全局可调用的有效工作日列表
在PowerQuery中新建空查询,命名为工作日列表,输入以下M代码:
let // 关联法定节假日表,排除节假日日期 关联节假日 = Table.NestedJoin(日历表, {"日期"}, 法定节假日表, {"节假日日期"}, "节假日匹配", JoinKind.LeftOuter), 排除节假日 = Table.SelectRows(关联节假日, each Table.IsEmpty([节假日匹配])), // 排除周末日期 排除周末 = Table.SelectRows(排除节假日, each [IsWeekend] = false), // 提取有效日期转为有序列表 有效工作日列表 = List.Sort(Table.Column(排除周末, "日期")) in 有效工作日列表
- 给订单表添加到货日期计算列
在PowerQuery编辑器中打开订单表,点击「添加列」-「自定义列」,输入以下公式:
let 发货日 = [发货日期], // 筛选所有晚于等于发货日的有效工作日 可选日期 = List.Select(工作日列表, each _ >= 发货日), // 取往后第6个工作日(索引从0开始计数) 到货日期 = 可选日期{6} in 到货日期
注:如果要求发货日当天计入第一个工作日,把索引值调整为
{5}即可。
- 把新增的自定义列格式设置为日期格式,加载回数据模型即可使用。
示例验证
发货日期为2021年1月1日的场景:
2021/1/1为元旦法定节假日,有效工作日从1月4日(周一)开始计数,数6个工作日为1月11日,最终到货日期返回11/01/2021,和需求示例一致。
内容的提问来源于stack exchange,提问作者YLE
相关产品推荐
相关产品推荐

