求所选日期范围最接近日期的库存值(Power BI DAX公式求助)
DAX多维度库存起止值计算方案
问题核心
需要基于所选日期范围的起止点,为每个ID、仓库找到小于等于起止日期的最近库存记录,同时处理库存表中日期重复(同一日期同一维度有多条变动记录)的情况。原公式未考虑维度上下文和库存表的实际日期存在情况,导致计算失效。
原公式问题分析
- 误用
LASTDATE('Calendar'[Dates]):日历表日期是连续的,但我们需要的是库存表中实际存在的、不晚于所选日期的最近日期,而非日历表的最后一天。 - 未保留ID/仓库维度:直接SUM会跨维度聚合,无法得到每个ID、仓库单独的库存值。
修正后的度量值
1. 计算范围上限(所选最大日期对应的最近库存)
范围上限库存 = VAR SelectedMaxDate = MAX('Calendar'[Dates]) -- 锁定当前ID、仓库,找到库存表中<=所选最大日期的最后一个有效日期 VAR LatestStockDate = CALCULATE( MAX(StockTable[Date]), StockTable[Date] <= SelectedMaxDate, ALLEXCEPT(StockTable, StockTable[ID], StockTable[Warehouse]) ) -- 取该日期下对应维度的库存总和(若同一日期仅一条记录,可替换为MAX) RETURN CALCULATE( SUM(StockTable[Current stock]), StockTable[Date] = LatestStockDate, ALLEXCEPT(StockTable, StockTable[ID], StockTable[Warehouse]) )
2. 计算范围下限(所选最小日期对应的最近库存)
逻辑与上限一致,仅需将所选日期改为最小日期:
范围下限库存 = VAR SelectedMinDate = MIN('Calendar'[Dates]) VAR EarliestStockDate = CALCULATE( MAX(StockTable[Date]), StockTable[Date] <= SelectedMinDate, ALLEXCEPT(StockTable, StockTable[ID], StockTable[Warehouse]) ) RETURN CALCULATE( SUM(StockTable[Current stock]), StockTable[Date] = EarliestStockDate, ALLEXCEPT(StockTable, StockTable[ID], StockTable[Warehouse]) )
特殊场景处理
如果Current stock不是直接存储的,而是需要通过Quantity变动累计计算,先创建度量值计算每日库存:
每日当前库存 = CALCULATE( SUM(StockTable[Quantity]), FILTER( ALLEXCEPT(StockTable, StockTable[ID], StockTable[Warehouse]), StockTable[Date] <= EARLIER(StockTable[Date]) ) )
之后将上述起止库存度量值中的StockTable[Current stock]替换为[每日当前库存]即可。
内容的提问来源于stack exchange,提问作者Petanek333
相关产品推荐
相关产品推荐

