如何用DAX筛选按ki_File分组的dy_UpCst最大值行
DAX实现按分组筛选最大值行的方案
以下是几种简洁高效的DAX方案,实现按ki_File分组后,筛选出dy_UpCst值最大的行:
方法1:GENERATE + TOPN(直观易懂)
通过GENERATE遍历每个唯一的ki_File,再用TOPN取出对应分组里dy_UpCst最大的行:
筛选后表 = GENERATE ( VALUES ( '源表'[ki_File] ), TOPN ( 1, FILTER ( '源表', '源表'[ki_File] = EARLIER ( '源表'[ki_File] ) ), '源表'[dy_UpCst], DESC -- 若需处理同分组内最大值重复的情况,可添加额外排序字段,例如:'源表'[某唯一字段], ASC ) )
方法2:FILTER + MAXX(简洁筛选)
直接在源表中筛选出dy_UpCst等于对应分组最大值的行:
筛选后表 = FILTER ( '源表', '源表'[dy_UpCst] = MAXX ( FILTER ( '源表', '源表'[ki_File] = EARLIER ( '源表'[ki_File] ) ), '源表'[dy_UpCst] ) )
如果同分组内存在多个dy_UpCst等于最大值的行,此方法会保留所有符合条件的行。
方法3:CALCULATETABLE + TREATAS(高性能适配)
先聚合出每个ki_File对应的最大dy_UpCst,再通过TREATAS关联回源表获取完整行数据,大数据量场景下性能更优:
筛选后表 = CALCULATETABLE ( '源表', TREATAS ( SUMMARIZE ( '源表', '源表'[ki_File], "Max_UpCst", MAX ( '源表'[dy_UpCst] ) ), '源表'[ki_File], '源表'[dy_UpCst] ) )
补充说明
- 若要确保每个分组仅返回一行(即使存在多个最大值),可在
TOPN中添加第二个排序依据(比如唯一标识字段),避免结果出现多行。 - 上述代码中的
'源表'需替换为你实际使用的表名称。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

