获取各学生指定月份最新分数的DAX公式及月度平均分实现方案
解决DAX获取学生当月最新分数的问题
需求明确:获取每个学生指定月份内最晚日期对应的分数(忽略Session字段),后续基于这些分数生成月度平均分图表。
你当前的代码是基于Session字段取最大值来匹配分数,现在需要改成基于Date字段的最晚日期来处理,下面是调整后的两种可行写法:
写法一:分步明确逻辑
Latest Score = VAR CurrentStudent = SELECTEDVALUE(tbl[Student Name]) VAR CurrentYear = YEAR(SELECTEDVALUE(tbl[Date])) VAR CurrentMonth = MONTH(SELECTEDVALUE(tbl[Date])) -- 获取当前学生当月的最晚日期 VAR LatestStudentDate = MAXX( FILTER( ALL(tbl), tbl[Student Name] = CurrentStudent && YEAR(tbl[Date]) = CurrentYear && MONTH(tbl[Date]) = CurrentMonth ), tbl[Date] ) -- 匹配该日期对应的分数 RETURN CALCULATE( MAX(tbl[Score]), FILTER( tbl, tbl[Student Name] = CurrentStudent && tbl[Date] = LatestStudentDate ) )
写法二:简洁版(利用上下文保留)
Latest Score = CALCULATE( MAX(tbl[Score]), -- 保留学生、年月的筛选上下文,只移除日期日级别的筛选 ALLEXCEPT(tbl, tbl[Student Name], tbl[Date].[Year], tbl[Date].[Month]), -- 筛选出当前上下文内的最晚日期 tbl[Date] = LASTDATE(tbl[Date]) )
关键调整说明
- 替换了原来基于Session的匹配逻辑,改为基于
Date字段的最晚日期作为匹配条件 - 引入年月筛选确保只计算当前月份内的记录,避免跨月份取到更早/更晚的日期
- 用
MAX(tbl[Score])是为了处理同一天内同一学生有多条分数记录的情况(如果当天分数唯一,用SUM/MAX都可以)
后续生成月度平均分图表
将这个Latest Score度量值拖到图表的「值」区域,然后把tbl[Date]的年月层级(比如Date[Month-Year])拖到「轴」区域,Power BI会自动计算每个月份下所有学生最新分数的平均值。
内容的提问来源于stack exchange,提问作者PriyankaJ
相关产品推荐
相关产品推荐

