You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求所选日期范围最接近日期的库存值(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:16:01