如何创建DAX表:基于最早日期保留唯一认证记录
DAX实现过滤重复认证等级的检查记录
问题说明
初始表TableA包含人员姓名、认证等级历史、认证检查日期(格式为DD/MM/YYYY),需生成目标表TableB:过滤掉同一人员多次检查但认证等级未变更的行,仅保留该等级首次出现的检查记录。
示例:Bob的两次检查(03/02/2023、20/03/2023)认证等级未变,仅保留03/02/2023的记录。
此前尝试的代码无法保留日期列:
TableB = DISTINCT(SELECTCOLUMNS(TableA, "Name", TableA[Name], "Certificate-Level", TableA[Certificate-Level]))
解决方案
方法1:GROUPBY分组取最早日期
通过GROUPBY按姓名和认证等级分组,再用MINX提取每组的最早检查日期:
TableB = GROUPBY( TableA, TableA[Name], TableA[Certificate-Level], "Check-Date", MINX(CURRENTGROUP(), TableA[Check-Date]) )
方法2:RANKX筛选首条记录
先给每个姓名+等级的分组按日期升序排名,再筛选排名为1的记录:
TableB = VAR RankedTable = ADDCOLUMNS( TableA, "Rank", RANKX( FILTER(TableA, TableA[Name] = EARLIER(TableA[Name]) && TableA[Certificate-Level] = EARLIER(TableA[Certificate-Level])), TableA[Check-Date], , ASC, DENSE ) ) RETURN SELECTCOLUMNS( FILTER(RankedTable, [Rank] = 1), "Name", [Name], "Certificate-Level", [Certificate-Level], "Check-Date", [Check-Date] )
方法3:CALCULATETABLE结合最小日期筛选
对每一行验证是否为对应姓名+等级下的最早检查日期,符合条件则保留:
TableB = CALCULATETABLE( TableA, FILTER( TableA, TableA[Check-Date] = CALCULATE( MIN(TableA[Check-Date]), ALLEXCEPT(TableA, TableA[Name], TableA[Certificate-Level]) ) ) )
内容的提问来源于stack exchange,提问作者kyarudata
相关产品推荐
相关产品推荐

