Power BI中用DAX列按组筛选符合条件的最新记录
解决Power BI中DAX列标记符合条件的最新更新记录问题
先明确你要实现的核心逻辑:按Id分组,根据组内删除记录的状态和顺序标记目标行。下面是能覆盖所有规则的DAX列代码:
Result = VAR CurrentId = 'Table'[Id] -- 获取当前Id组的所有记录 VAR GroupRecords = CALCULATETABLE('Table', ALLEXCEPT('Table', 'Table'[Id])) -- 获取组内最后一条记录的Deleted状态 VAR LastDeletedStatus = MAXX(TOPN(1, GroupRecords, 'Table'[Modified On], DESC), 'Table'[Deleted]) -- 检查组内是否存在Deleted=True的记录 VAR HasDeleted = COUNTROWS(FILTER(GroupRecords, 'Table'[Deleted] = TRUE())) > 0 -- 获取组内最后一条Deleted=False的记录的Modified On时间 VAR LastNonDeletedTime = MAXX(FILTER(GroupRecords, 'Table'[Deleted] = FALSE()), 'Table'[Modified On]) -- 获取组内第一条记录的Modified On时间(当全是Deleted=True时用) VAR FirstRecordTime = MINX(GroupRecords, 'Table'[Modified On]) RETURN IF( -- 规则2:无删除操作,返回空 HasDeleted = FALSE(), BLANK(), IF( -- 规则4:最后一条不是删除,返回空 LastDeletedStatus = FALSE(), BLANK(), IF( -- 规则1:存在未删除记录,当前行是最后一条未删除的 NOT ISBLANK(LastNonDeletedTime) && 'Table'[Modified On] = LastNonDeletedTime, TRUE(), -- 规则3:无未删除记录,当前行是第一条记录 ISBLANK(LastNonDeletedTime) && 'Table'[Modified On] = FirstRecordTime, TRUE() ) ) )
代码逻辑拆解
变量定义:
CurrentId:锁定当前行的分组IdGroupRecords:获取当前Id下的所有记录,用于后续组内计算LastDeletedStatus:取组内最新(Modified On降序第一条)记录的Deleted状态HasDeleted:判断组内是否有过删除操作LastNonDeletedTime:找到组内最后一条未删除记录的时间戳FirstRecordTime:组内最早记录的时间戳,用于全是删除记录的情况
规则匹配:
- 先判断规则2:组内无删除操作,直接返回空
- 再判断规则4:组内最后一条不是删除,返回空
- 接着处理规则1:如果存在未删除记录,当前行的时间等于最后一条未删除的时间,标记为True
- 最后处理规则3:如果组内全是删除记录,当前行是第一条记录,标记为True
注意事项
- 确保
Modified On是日期时间类型,能准确排序;如果用Count列(按Modified On升序生成的次数),可以把代码里的'Table'[Modified On]替换成'Table'[Count],逻辑一致 - 测试时可以针对每个Id的场景验证:比如Id=3(全删除记录)、Id=1(最后删除且有未删除记录)、Id=2(最后未删除)、Id=4(无删除)
内容的提问来源于stack exchange,提问作者Charles Michel
相关产品推荐
相关产品推荐

