前言:power query中的Date.IsInCurrentWeek提取的是本周日-本周六(西方人的一周),但是中国人的一周往往是本周一-本周日;另外有时候做报表的时候并不是自然周,有可能是自定义的,而pq中缺少相关自定义的选项。
解决思路:有两个解决办法,第一个是选择先在excel中新建一个辅助表,用excel公式获得起始日和起始月,结束日和结束月。再在pq的高级编辑器中,以日期辅助表[起始月]{0}来代替pq公式中的数字;第二个办法是通过PQ的一些好用公式,直接做出相关参数。
两种方法都可以,方法二更简单一些,不用构建辅助表了
方法一:
1、Excel辅助表:
从左至右的公式是:
1)=TODAY()
2)=WEEKDAY(TODAY())
3)=IF(B2=2,7,IF(B2=3,1,IF(B2=4,2,IF(B2=5,3,IF(B2=6,4,IF(B2=7,5,6))))))
4)=TODAY()-C2
5)=MONTH([@统计起始日期])
6)=DAY([@统计起始日期])
7)=TODAY()-1
8)=MONTH([@统计结束日期])
9)=DAY([@统计结束日期])
2、把这张表上传到PQ,并改名为“日期辅助表”
3、在需要提取日期的表中,“更改的类型”这一列后新增四列(也可以不加,不过这样计算速度会快一点):
1)startmonth = 日期辅助表[起始月]{0},
2)startday = 日期辅助表[起始日]{0},
3)endmonth = 日期辅助表[结束月]{0},
4)endday = 日期辅助表[结束日]{0},
注:这里需确认格式都是数值,否则会报错!
4、在日期提取中,有个公式为:
筛选的行 = Table.SelectRows(更改的类型, each [统计日期] >= #datetime(2019, 2,11, 0, 0, 0) and [统计日期] <= #datetime(2019, 2, 14, 0, 0, 0)),
改成
筛选的行 = Table.SelectRows(更改的类型, each [统计日期] >= #datetime(2019, startmonth, startday, 0, 0, 0) and [统计日期] <= #datetime(2019, endmonth, endday, 0, 0, 0)),
如果上述辅助行不加的话,就改成
筛选的行 = Table.SelectRows(更改的类型, each [统计日期] >= #datetime(2019, 日期辅助表[起始月]{0}, 日期辅助表[起始日]{0}, 0, 0, 0) and [统计日期] <= #datetime(2019, 日期辅助表[结束月]{0}, 日期辅助表[结束日]{0}, 0, 0, 0)),
方法二:(把下述代码放入高级编辑器筛选清单步骤的上面,然后和方法一最后一步一样)
weekday = Date.DayOfWeek(DateTime.LocalNow()),
天数 = if weekday = 1 then 7 else if weekday = 0 then 6 else weekday - 1,
startofdate = Date.From(Number.RoundDown(Number.From(DateTime.LocalNow()) - 天数)),
endofdate = Date.From(Number.RoundDown(Number.From(DateTime.LocalNow()) - 1)),
startday = Date.Day(startofdate),
startmonth = Date.Month(startofdate),
endday = Date.Day(endofdate),
endmonth = Date.Month(endofdate),