DAX实现按分组获取最新记录:计数列或标记列
在DAX中按分组生成指定列的两种实现方法
实现方式1:组内按时间顺序生成递增计数(最新时间计数最大)
使用RANKX函数在分组内对时间列进行排名,让最新的时间获得最大的计数值:
Column C = VAR CurrentGroup = 'Table'[Column A] VAR CurrentTime = 'Table'[Column B] RETURN RANKX( FILTER('Table', 'Table'[Column A] = CurrentGroup), 'Table'[Column B], CurrentTime, ASC, -- 按时间升序排名,最早时间得1,最新时间得最大数 DENSE -- 若存在相同时间,排名相同;需唯一排名可替换为SKIP )
FILTER('Table', 'Table'[Column A] = CurrentGroup):限定当前计算仅在当前Column A的分组内进行ASC参数指定按时间升序排序,确保最新的时间对应最大的计数值DENSE参数处理重复时间的场景,避免排名出现跳号;如果需要每条记录排名唯一,改用SKIP即可
实现方式2:仅标记组内最新时间的记录为True
通过计算分组内的最大时间,匹配当前行时间来生成标记列:
Column C = VAR CurrentGroup = 'Table'[Column A] VAR MaxTimeInGroup = CALCULATE(MAX('Table'[Column B]), ALLEXCEPT('Table', 'Table'[Column A])) RETURN IF('Table'[Column B] = MaxTimeInGroup, TRUE(), BLANK())
ALLEXCEPT('Table', 'Table'[Column A]):清除除Column A外的所有筛选上下文,确保计算的是当前分组内的最大时间- 当当前行的Column B等于分组内最大时间时返回
TRUE(),其余情况返回空值BLANK()
内容的提问来源于stack exchange,提问作者Charles Michel
相关产品推荐
相关产品推荐

