如何在Power BI中按KPI创建上一次测量值的计算列?
解决方案:按KPI获取上一次测量值的计算列
问题分析
你之前的公式失效原因有两点:
- 依赖
DATESMTD和DATEADD按月取数,但你的KPI测量日期并非每月固定(比如KPI2仅在1/3/6月有数据),无法匹配非连续月份的上一次测量记录; - 未按
KPI分组,导致跨KPI的日期匹配逻辑错误,最终返回全空。
正确DAX计算列公式
以下公式会为每一行匹配对应KPI的上一次测量值,首次测量记录返回空白:
Value at previous measurement = VAR CurrentKPI = test_table[KPI] VAR CurrentDate = test_table[Date] -- 找到当前KPI下早于当前日期的最近测量日期 VAR PreviousMeasureDate = CALCULATE( MAX(test_table[Date]), FILTER(test_table, test_table[KPI] = CurrentKPI && test_table[Date] < CurrentDate) ) -- 根据找到的日期匹配对应Value RETURN LOOKUPVALUE( test_table[Value], test_table[KPI], CurrentKPI, test_table[Date], PreviousMeasureDate )
逻辑说明
- 定义
CurrentKPI和CurrentDate变量,锁定当前行的KPI和测量日期; - 通过
CALCULATE+MAX+FILTER,筛选出同一KPI下早于当前日期的最大日期(即上一次测量的日期); - 用
LOOKUPVALUE根据KPI和上一次日期,匹配对应的测量值。
备选写法(简化版)
如果你的数据中每个KPI+日期是唯一的,也可以用更简洁的写法:
Value at previous measurement = CALCULATE( MAX(test_table[Value]), FILTER( test_table, test_table[KPI] = EARLIER(test_table[KPI]) && test_table[Date] = CALCULATE(MAX(test_table[Date]), FILTER(test_table, test_table[KPI] = EARLIER(test_table[KPI]) && test_table[Date] < EARLIER(test_table[Date]))) ) )
内容的提问来源于stack exchange,提问作者GiorgioP_D
相关产品推荐
相关产品推荐

