You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:45:11