如何在Power BI中计算日期所属的当月周数?
解决DAX计算当月周数错误的问题
问题根源
你当前使用的公式依赖WEEKNUM的全年周数差值计算,这种方法存在明显缺陷:当月份第一天所在的全年周数与当前日期的全年周数跨年度(比如1月初),或者周起始规则不匹配时,结果会失真。比如2022年3月1日是周二,若WEEKNUM用默认的周日起始规则,3月1日属于第9周、3月21日属于第12周,按原公式应得4,但你得到1,说明周起始参数或日期识别环节出了问题——换用基于当月日期的计算逻辑更可靠。
正确DAX公式
根据你需要的周起始规则,选择对应公式:
规则1:周起始为周日(与WEEKNUM参数1一致)
Week of Month = VAR MonthStart = STARTOFMONTH('ECR'[Date Originated]) VAR DayOfMonth = DAY('ECR'[Date Originated]) VAR WeekdayOfMonthStart = WEEKDAY(MonthStart, 1) // 周日=1,周一=2…周六=7 RETURN CEILING((DayOfMonth + WeekdayOfMonthStart - 1)/7, 1)
规则2:周起始为周一(与WEEKNUM参数2一致)
Week of Month = VAR MonthStart = STARTOFMONTH('ECR'[Date Originated]) VAR DayOfMonth = DAY('ECR'[Date Originated]) VAR WeekdayOfMonthStart = WEEKDAY(MonthStart, 2) // 周一=1,周二=2…周日=7 RETURN CEILING((DayOfMonth + WeekdayOfMonthStart - 1)/7, 1)
验证你的示例
- 针对
Tuesday, March 21, 2022:
3月1日是周二,按周日起始规则计算,WeekdayOfMonthStart=3,代入公式得(21+3-1)/7≈3.28,经CEILING取整后为4,这是正确的当月周数(3月21日属于当月第4周)。 - 针对
Wednesday, April 6, 2022:
4月1日是周五,按周日起始规则计算,WeekdayOfMonthStart=6,代入公式得(6+6-1)/7≈1.57,取整后为1,和你预期的结果一致。
额外提示
如果你的Date Originated列是文本格式,需先转换为日期类型,否则DAX函数无法正确识别:
Date Originated (Date Type) = DATEVALUE('ECR'[Date Originated])
之后用转换后的日期列计算周数即可。
内容的提问来源于stack exchange,提问作者thechans7
相关产品推荐
相关产品推荐

