You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Power BI中如何按组汇总每个人员的最新值?

按组取最新值再求和的DAX解决方案

这个问题我太熟悉了!你碰到的核心问题在于LASTDATE函数是在当前整个筛选上下文里返回单一的最新日期,而不是按Person分组后每组各自的最新日期。要实现「按每个人取最新成绩,再把这些成绩求和」的需求,用DAX可以通过两种常用方法解决:

方法一:先分组生成最新成绩表,再求和

这种方法逻辑清晰,先通过SUMMARIZE生成每个人员的最新成绩表,再对表中的成绩求和:

Sum_Latest_Grade = 
VAR Person_Latest_Grades = 
    SUMMARIZE(
        '你的数据表',  -- 替换成你实际的表名
        '你的数据表'[Person],
        "Latest_Grade", 
        CALCULATE(
            MAX('你的数据表'[Grade]),  -- 若同一人同一天有多个成绩,这里可换AVERAGE/SUM等
            FILTER(
                '你的数据表',
                '你的数据表'[Date] = MAX('你的数据表'[Date])
            )
        )
    )
RETURN
    SUMX(Person_Latest_Grades, [Latest_Grade])

逻辑说明:

  1. SUMMARIZEPerson分组,为每个人生成一行记录
  2. 对每组,用FILTER筛选出该人员的所有记录中日期等于自身最新日期的行,再用MAX取出对应成绩(如果同一天有多个成绩,你可以根据需求替换聚合函数)
  3. 最后用SUMX遍历这个分组表,把所有人的最新成绩加起来

方法二:直接遍历人员计算,代码更简洁

如果不想生成中间表,也可以用SUMX结合TOPN直接计算:

Sum_Latest_Grade = 
SUMX(
    VALUES('你的数据表'[Person]),  -- 获取所有唯一的人员
    MAXX(
        TOPN(1, FILTER('你的数据表', '你的数据表'[Person] = EARLIER('你的数据表'[Person])), '你的数据表'[Date], DESC),
        '你的数据表'[Grade]
    )
)

逻辑说明:

  1. VALUES('你的数据表'[Person])得到所有不重复的人员列表
  2. SUMX遍历每个人员,对当前人员:
    • FILTER筛选出该人员的所有记录
    • TOPN(1, ..., Date, DESC)取出其中日期最新的那一行
    • MAXX取出这一行的Grade
  3. 最后把所有人员的最新Grade相加

验证你的示例数据

代入你给出的表格:

  • P1的最新日期是2022年2月,对应Grade=7
  • P2的最新日期是2021年8月,对应Grade=9
    两种方法计算后都会得到7+9=16,完全符合你的期望结果。

如果你的场景里还有其他筛选条件(比如你提到的radar类别),只需要把筛选条件加到DAX的筛选上下文里即可(比如在CALCULATE里添加'你的数据表'[类别] = "radar")。

内容的提问来源于stack exchange,提问作者Severino Netto

火山引擎 最新活动