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

4-5-4日历下DAX上期实际库存度量过滤后为空的问题求助

问题与解决方案:4-5-4日历下DAX度量在DOS筛选时返回空值

问题背景

基于4-5-4周基日历构建数据模型,关联月度在手量表LOT HIERARCHY JOIN与出库表STOW SHIP FILES计算**天数供应(DOS)**指标。因4-5-4日历无法使用标准DAX时间智能函数,编写的上期实际库存度量在无筛选时正常,但应用[DOS]>90天筛选后返回空值。已尝试调整度量逻辑(使用ALL、移除KEEPFILTERS),问题仍存在。

相关度量逻辑:

  1. 上期实际库存修正度量:
A REV PREV PERIOD ACTUAL = 
VAR CurrentYearMonth = SELECTEDVALUE ( 'CALENDAR'[YEAR MONTH NUM] )
VAR PreviousYearMonth =
    CALCULATE (
        MAX ( 'CALENDAR'[YEAR MONTH NUM] ),
        ALL ( 'CALENDAR' ),
        'CALENDAR'[YEAR MONTH NUM] < CurrentYearMonth
    )
VAR Result =
    CALCULATE (
        SUM('LOT HIERARCHY JOIN'[Actual Qty]),
        'CALENDAR'[YEAR MONTH NUM] = PreviousYearMonth,
        REMOVEFILTERS ( 'CALENDAR' )
    )
RETURN
    Result
  1. 期末平均库存:
Average Inventory EOP = ([Prev Period Actual Qty]+[QTY AVAIL])/2
  1. 天数供应:
DOS = [Average Inventory EOP]/SUM('STOW SHIP FILES'[QUANTITY_SHIPPED])*[DAYS COUNT 4-5-4]

问题根源

当应用[DOS]>90的动态筛选时,筛选条件会基于最终计算的DOS值反向过滤模型行,引发两个关键问题:

  • SELECTEDVALUE('CALENDAR'[YEAR MONTH NUM])仅在单个年月被选中时返回有效值,DOS筛选压缩上下文后,可能无明确的单个选中值,导致CurrentYearMonth为空。
  • REMOVEFILTERS('CALENDAR')仅清除日历表筛选,但LOT HIERARCHY JOIN和STOW SHIP FILES上由DOS筛选传递而来的过滤上下文仍存在,导致上期库存计算无法匹配到对应月份的数据。

修正后的度量方案

修改[A REV PREV PERIOD ACTUAL]度量,确保在动态筛选下仍能正确获取上下文并清除干扰筛选:

A REV PREV PERIOD ACTUAL = 
VAR CurrentContext = VALUES('CALENDAR'[YEAR MONTH NUM])
VAR CurrentYearMonth = MAXX(CurrentContext, 'CALENDAR'[YEAR MONTH NUM])
VAR PreviousYearMonth =
    CALCULATE (
        MAX('CALENDAR'[YEAR MONTH NUM]),
        ALL('CALENDAR'),
        'CALENDAR'[YEAR MONTH NUM] < CurrentYearMonth
    )
VAR Result =
    CALCULATE (
        SUM('LOT HIERARCHY JOIN'[Actual Qty]),
        'CALENDAR'[YEAR MONTH NUM] = PreviousYearMonth,
        REMOVEFILTERS('CALENDAR'),
        -- 保留用户手动选择的业务维度(如仓库、产品),清除DOS筛选带来的其他表干扰
        ALLSELECTED(EXCEPT(ALL(), 'CALENDAR'))
    )
RETURN
    IF(NOT ISBLANK(PreviousYearMonth), Result)

关键修改说明

  1. 替换SELECTEDVALUE为MAXX(VALUES(...)):从当前筛选上下文的年月集合中取最大值,避免因DOS筛选导致无单个选中值时返回空。
  2. 添加ALLSELECTED(EXCEPT(ALL(), 'CALENDAR')):清除由DOS筛选传递到其他表的过滤上下文,同时保留用户手动选择的业务维度(如仓库),确保上期库存计算基于正确的业务范围。
  3. 增加空值判断:避免因无上期月份时返回空值,提升度量健壮性。

此外,需确保[QTY AVAIL]度量同样能在动态筛选下正确返回当前月份的可用库存,若该度量也存在上下文问题,可参照上述逻辑调整。

内容的提问来源于stack exchange,提问作者Guitarmageddon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:25:24