DAX周期筛选异常:起始月大于结束月时日期范围查询失效
问题根源
你遇到的问题核心是错误地将日期类型转换为字符串后进行比较。DAX中字符串的比较是按字符顺序逐位判断的,比如"01.09.2021"和"01.08.2022",会先比较前两位日(都是01),接着比较中间两位月:"09"比"08"大,所以整个字符串"01.09.2021"会被判定为大于"01.08.2022",导致你的筛选条件完全不成立,自然没有结果。而当起始月小于结束月时,字符串顺序和日期顺序一致,所以能正常工作。
解决方案
直接使用日期类型进行比较,不要对DATE函数的结果做FORMAT转换——DATE本身返回的就是日期类型,和'Date'[Report Date]的类型匹配:
, FILTER ( VALUES('Date'[Report Date]), 'Date'[Report Date] >= DATE(2021, 9, 1) // 直接用DATE返回的日期类型 && 'Date'[Report Date] <= DATE(2022, 8, 1) )
额外说明
如果你的@StartDate和@EndDate是字符串格式的参数(比如用户输入的"01.09.2021"),也不要把日期列转成字符串,而是把字符串参数转成日期类型后再比较,比如用DATEVALUE函数:
, FILTER ( VALUES('Date'[Report Date]), 'Date'[Report Date] >= DATEVALUE("01.09.2021") && 'Date'[Report Date] <= DATEVALUE("01.08.2022") )
日期类型的比较是基于实际的时间戳,会正确识别跨年度的日期范围,完全不会受月份大小的影响。
内容的提问来源于stack exchange,提问作者Limon
相关产品推荐
相关产品推荐

