Power BI需求:获取可用上一日期数据的度量值
Power BI 实现商品价格的最近可用日期填充
核心逻辑
针对Date表中的每个日期,先找到Data表中小于等于当前日期的最大可用日期,再提取该日期对应的商品价格;若当前日期本身在Data表中存在,则最大可用日期就是当前日期,直接取当日价格。
具体DAX度量值写法
以下以Item A为例,两种写法都可以实现需求,任选其一即可:
方法1:LOOKUPVALUE + 最近日期筛选
Item A 价格 = VAR CurrentDate = SELECTEDVALUE('Date'[Date]) -- 找到当前日期之前最后一个有价格的日期 VAR LastValidDate = CALCULATE(MAX('Data'[Date]), 'Data'[Date] <= CurrentDate) RETURN IF( NOT ISBLANK(LastValidDate), -- 根据找到的日期匹配对应商品价格 LOOKUPVALUE('Data'[Item A], 'Data'[Date], LastValidDate), BLANK() -- 无可用日期时返回空白 )
方法2:CALCULATE直接筛选取值
Item A 价格 = VAR CurrentDate = SELECTEDVALUE('Date'[Date]) RETURN -- 筛选Data表中日期<=当前日期的行,取对应商品价格(因每个日期唯一,MAX等价于取值) CALCULATE( MAX('Data'[Item A]), 'Data'[Date] <= CurrentDate, REMOVEFILTERS('Date') -- 清除Date表的上下文筛选,确保Data表筛选逻辑不受干扰 )
批量处理50个商品的建议
因为每个商品的度量值逻辑完全一致,仅商品列名不同,可通过以下方式批量创建:
- 复制上述任意一个度量值代码,批量替换代码中的
Item A为其他商品列名(如Item B、Item C等); - 使用DAX Studio的批量生成功能,通过脚本自动生成所有商品的度量值。
注意事项
- 确保
Data表的Date列是唯一值,避免出现同一日期对应多个价格的情况; - 若
Date表与Data表已建立基于Date列的关系,需注意上下文筛选的影响,必要时可使用ALL('Data'[Date])替代REMOVEFILTERS('Date')调整上下文。
内容的提问来源于stack exchange,提问作者AnzerManiak
相关产品推荐
相关产品推荐

