如何在Power Query中实现含日期+7天条件的COUNTIFS功能?
在Power Query中实现Excel COUNTIFS的分组日期判断功能
你需要实现的是按Lookup2分组,判断当前行日期加7天的记录是否在同组中存在,返回1或0(对应Excel里的COUNTIFS(Table1_1[Lookup2],Table1_1[@Lookup2],Table1_1[Date],Table1_1[@Date]+7)功能),以下是两种实用的实现方法:
方法一:添加自定义列直接判断(适合小数据量)
在Power Query编辑器中,选中你的数据表,执行以下步骤:
- 点击添加列选项卡 → 自定义列
- 在弹出的公式编辑器中输入以下代码(将
#"你的表名"替换为当前表的实际名称):
if List.Contains( Table.SelectRows(#"你的表名", each [Lookup2] = [@Lookup2])[Date], [@Date] + #duration(7, 0, 0, 0) ) then 1 else 0
- 点击确定,将新列重命名为
Result
代码说明:
Table.SelectRows(#"你的表名", each [Lookup2] = [@Lookup2]):筛选出与当前行Lookup2值相同的所有行[Date]:提取筛选结果中的日期列,形成日期列表List.Contains(..., [@Date] + #duration(7, 0, 0, 0)):判断当前日期加7天(用#duration定义7天时长)是否在上述列表中,是则返回1,否则返回0
方法二:合并查询实现(适合大数据量,性能更优)
当数据量较大时,方法一的逐行筛选效率较低,可通过合并自身查询实现:
- 在Power Query编辑器左侧的查询面板中,右键点击你的数据表 → 复制,将复制后的查询重命名为
Table_DatePlus7 - 打开
Table_DatePlus7,点击添加列 → 自定义列,输入公式:
[Date] + #duration(7, 0, 0, 0)
将该列重命名为MatchedDate,然后删除除Lookup2和MatchedDate之外的所有列
3. 回到原数据表,点击合并查询 → 合并查询作为新列:
- 左表选择原数据表,右表选择
Table_DatePlus7 - 设置匹配条件:
- 第一组:原表的
Lookup2=Table_DatePlus7的Lookup2 - 第二组:原表的
Date=Table_DatePlus7的MatchedDate
- 第一组:原表的
- 合并类型选择左外部
- 添加新的自定义列,判断合并列是否有匹配结果:
if [合并的列] <> null then 1 else 0
- 将该列重命名为
Result,删除中间的合并列即可
注意事项
确保你的Date列是日期/时间类型,若为文本类型需先通过转换选项卡 → 数据类型 → 日期进行转换,避免判断出错。
内容的提问来源于stack exchange,提问作者Zach Desgain
相关产品推荐
相关产品推荐

