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
相关产品推荐
相关产品推荐

