Power BI中如何按月内周生成对应日期区间列
问题分析与解决方案
你的DAX公式返回整月日期范围的核心原因:
- 公式中的条件
'Date'[Year] = 'Date'[Year] && 'Date'[Month] = 'Date'[Month] && 'Date'[Adjusted Week Of Month] = 'Date'[Adjusted Week Of Month]是恒成立的,没有起到按周分组筛选的作用 - 直接调用
MIN('Date'[Day])和MAX('Date'[Day])时,计算的是整个日期表的最小/最大日,而非当前周分组内的日期区间
正确的DAX表达式
你可以通过限定计算上下文,仅对当前行对应的年份、月份、月内周分组计算日期区间,以下两种方式均可实现:
方式1:使用FILTER明确筛选分组
Days in Week = VAR CurrentYear = 'Date'[Year] VAR CurrentMonth = 'Date'[Month] VAR CurrentWeek = 'Date'[Adjusted Week Of Month] VAR MinDay = CALCULATE(MIN('Date'[Day]), FILTER('Date', 'Date'[Year] = CurrentYear && 'Date'[Month] = CurrentMonth && 'Date'[Adjusted Week Of Month] = CurrentWeek)) VAR MaxDay = CALCULATE(MAX('Date'[Day]), FILTER('Date', 'Date'[Year] = CurrentYear && 'Date'[Month] = CurrentMonth && 'Date'[Adjusted Week Of Month] = CurrentWeek)) RETURN MinDay & " - " & MaxDay
方式2:使用ALLEXCEPT简化分组逻辑
Days in Week = VAR MinDay = CALCULATE(MIN('Date'[Day]), ALLEXCEPT('Date', 'Date'[Year], 'Date'[Month], 'Date'[Adjusted Week Of Month])) VAR MaxDay = CALCULATE(MAX('Date'[Day]), ALLEXCEPT('Date', 'Date'[Year], 'Date'[Month], 'Date'[Adjusted Week Of Month])) RETURN MinDay & " - " & MaxDay
说明
- 两种方式都通过
CALCULATE修改计算上下文,仅保留与当前行年份、月份、月内周一致的行 ALLEXCEPT会移除除指定列外的所有筛选器,是更简洁的分组筛选方式- 最终返回当前周分组内的最小日与最大日拼接成的区间字符串
内容的提问来源于stack exchange,提问作者Joshua Johnson
相关产品推荐
相关产品推荐

