DAX按ID判断最新日期:新增IS_LAST布尔列公式异常求助
问题解决:新增IS_LAST布尔列判断是否为ID最新日期
原公式错误原因
- 括号匹配错误:原公式将
=0嵌套在FILTER的括号内,导致COUNTROWS计算的是布尔值的行数,逻辑完全错误,正确逻辑应该是先计算FILTER返回的表行数,再判断是否为0。 - 上下文引用冲突:在
FILTER内部直接使用[ID]和[DATETIME]时,会被解析为FILTER上下文内的当前行值,导致筛选条件变成“当前行ID等于自身ID且当前行日期大于自身日期”,后者永远为假,所以COUNTROWS始终返回0,所有行都返回TRUE。
正确的DAX公式
方法一:使用变量存储当前行值(可读性高)
IS_LAST = VAR Current_ID = [ID] VAR Current_Datetime = [DATETIME] RETURN IF( COUNTROWS( FILTER( TABLE, TABLE[ID] = Current_ID && TABLE[DATETIME] > Current_Datetime ) ) = 0, TRUE(), FALSE() )
方法二:直接对比当前日期与ID的最大日期(更简洁)
IS_LAST = [DATETIME] = MAXX(FILTER(TABLE, TABLE[ID] = [ID]), TABLE[DATETIME])
说明
- 方法一中,用
VAR将当前行的ID和DATETIME存储为变量,确保FILTER内部引用的是外部上下文(当前行)的值,而非筛选过程中的行值。 - 方法二中,
MAXX函数会针对当前ID筛选出所有行,并返回其中最大的日期,直接与当前行日期对比即可得到结果,逻辑更直观。
内容的提问来源于stack exchange,提问作者solid
相关产品推荐
相关产品推荐

