如何用DAX获取切片器日期最近的记录并统计RAG评级
解决Power BI中按指标取最新RAG评级统计的问题
嘿,我来帮你搞定这个绩效报告里的RAG统计难题!你的核心需求很明确:对每个绩效指标(Ref),只取最接近但不晚于切片器日期的那条记录的RAG评级,然后统计各评级的数量,之前的度量值要么多统计了旧记录,要么没按每个指标独立计算,咱们来一步步解决它。
核心思路拆解
要实现这个需求,关键是先给每个指标锁定唯一的有效记录:
- 对每个指标,筛选出所有到期日<=切片器日期的记录,找到其中最晚的那个到期日
- 基于这个最晚到期日,提取对应指标的那条记录
- 最后统计这些有效记录里各RAG评级的数量
正确的DAX度量值
直接用这个度量值替换你之前的尝试:
RAG Count Correct = VAR SlicerDate = MAX(Dates[Day]) -- 第一步:按指标分组,获取每个指标符合条件的最晚到期日 VAR LastValidDates = SUMMARIZE( FILTER(Data, Data[Data due] <= SlicerDate), Data[Ref], "LastDue", MAX(Data[Data due]) ) -- 第二步:关联原始数据,筛选出每个指标的唯一有效记录 VAR ValidRecords = NATURALINNERJOIN( Data, LastValidDates ) -- 第三步:统计有效记录中的RAG数量 RETURN COUNTAX(ValidRecords, Data[RAG])
度量值逐段解释
SlicerDate:获取日期切片器选中的最大日期,也就是你要查看的「截至日期」。LastValidDates:用SUMMARIZE按Ref(指标)分组,先过滤掉到期日晚于切片器日期的无效记录,然后给每个指标取最晚的到期日,得到一张「指标+对应有效到期日」的表。ValidRecords:用NATURALINNERJOIN把原始数据表和上面的「有效日期表」关联,这样就精准筛选出了每个指标唯一的有效记录——既不会漏,也不会多统计旧记录。- 最终返回:用
COUNTAX统计这些有效记录里的RAG字段数量,配合饼图的「Rating」图例,就能自动拆分出红、黄、绿、未评级的占比。
为什么之前的度量值出问题?
- 你之前的
TestCountaxpt2用MINX找最小日期差的逻辑本身没问题,但ALL(Data)会清除上下文筛选,导致总计计算混乱,而且没有稳定锁定每个指标的独立计算逻辑。 RAGCount里用LASTDATE这个时间智能函数,它依赖日期表的上下文,当你在SUMMARIZE里使用时,容易受全局日期上下文干扰,不如直接用MAX(Data[Data due])更直接可靠。
验证效果
用你提到的切片器设为2020年1月3日的场景,这个度量值会:
- 给每个指标找到对应的最晚到期日(比如延迟的指标会取更早的到期日)
- 提取每个指标的唯一有效RAG记录
- 统计出2绿、2红、2未评级、1黄的正确结果,饼图也能完美展示各评级的占比
内容的提问来源于stack exchange,提问作者Ben A
相关产品推荐
相关产品推荐

