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

Power BI Measure创建:基于人员最后体重计算平均值(支持年份筛选)

计算Power BI中人员最后一次体重的平均值(支持年份筛选)

思路拆解

要搞定这个需求,核心就是两步走:先给每个人员找到他们在当前筛选范围内最后一次记录体重的年份,再把对应年份的体重捞出来,最后算这些体重的平均值就行。完全不碰那些依赖趋势的函数,不管体重是涨是跌,只认最新的那条记录,完美适配你的场景。

完整DAX Measure代码

Avg of Last Weight = 
VAR CurrentYearFilter = MAX('WeightTable'[Year]) -- 拿到当前筛选的最大年份,没筛选就是所有数据里的最晚年份
VAR PersonLastYear = 
    ADDCOLUMNS(
        VALUES('WeightTable'[Person]), -- 获取所有可见的人员列表
        "@LastYear", CALCULATE(MAX('WeightTable'[Year]), 'WeightTable'[Year] <= CurrentYearFilter)
    )
VAR PersonLastWeight = 
    ADDCOLUMNS(
        PersonLastYear,
        "@LastWeight", CALCULATE(MAX('WeightTable'[Weight]), 
            FILTER('WeightTable', 
                'WeightTable'[Person] = EARLIER('WeightTable'[Person]) && 
                'WeightTable'[Year] = EARLIER([@LastYear])
            )
        )
    )
RETURN
    AVERAGEX(PersonLastWeight, [@LastWeight])

逐行唠唠代码逻辑

  • CurrentYearFilter:先抓当前筛选条件下的最大年份——比如没筛选的时候就是2012,筛选2011的话这里就是2011,非常直观。
  • PersonLastYear:给每个能看到的人员,算他们在不超过上面那个最大年份的范围内,最后一次记录体重的年份。比如没筛选时,Mike最后记录是2011,Laura是2012。
  • PersonLastWeight:拿着每个人员的最后年份,去匹配对应的体重值。这里用MAX是因为如果同一年有多个体重记录(虽然你给的例子里没有),取最大的;如果需要取最后一条,后续可以加日期字段调整,当前需求用MAX完全没问题。
  • RETURN部分:用AVERAGEX遍历每个人员的最后体重,算出平均值,就是我们要的结果啦。

验证一下你的场景

  • 无年份筛选:Mike最后体重80,Laura最后体重58,(80+58)/2=69,正确。
  • 筛选2011:Mike最后体重80,Laura最后体重55,(80+55)/2=67.5,正确。
  • 筛选2010:Mike最后体重75,Laura最后体重60,(75+60)/2=67.5,正确。

小提醒

  • 记得把代码里的WeightTable换成你实际的表名哈!
  • 如果你的数据里有更细的日期(不是只有年份),可以把MAX('WeightTable'[Year])换成MAX('WeightTable'[Date]),逻辑一样,更精准。

内容的提问来源于stack exchange,提问作者Panda Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:29:40