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

将SQL函数DaysOnHand转换为Power BI DAX度量值求助

将SQL自定义函数DaysOnHand转换为Power BI DAX度量值

需求说明

需创建支持动态交互的DAX度量值,自动读取用户选中的tblInventoryHistory[LocNo]、tblInventoryHistory[ItemNo]和tblDate[Date]值,替代原需参数调用的SQL自定义函数。

原SQL函数逻辑回顾

根据指定的仓库编号、商品编号和截止日期,筛选出该日期及之前最新的库存记录,判断库存结余(OnHandAfter)是否≤0:

  • 若库存结余≤0或无匹配记录,返回0
  • 若库存结余>0,返回1

转换后的DAX度量值代码

DaysOnHand = 
VAR SelectedLoc = SELECTEDVALUE(tblInventoryHistory[LocNo])
VAR SelectedItem = SELECTEDVALUE(tblInventoryHistory[ItemNo])
VAR SelectedDate = SELECTEDVALUE(tblDate[Date])
VAR LatestInventory = 
    TOPN(
        1,
        FILTER(
            tblInventoryHistory,
            tblInventoryHistory[LocNo] = SelectedLoc &&
            tblInventoryHistory[ItemNo] = SelectedItem &&
            tblInventoryHistory[AsOfDate] <= SelectedDate
        ),
        tblInventoryHistory[AsOfDate], DESC,
        tblInventoryHistory[AsOfTime], DESC
    )
VAR OnHandValue = COALESCE(SELECTCOLUMNS(LatestInventory, "Value", [OnHandAfter]), 0)
RETURN IF(OnHandValue <= 0, 0, 1)

代码逻辑说明

  1. 变量定义:通过SELECTEDVALUE获取用户在报表交互中选中的仓库、商品和日期值,对应原SQL函数的三个参数
  2. 筛选最新库存记录:使用TOPN(1)配合FILTER,筛选出符合条件的最新库存记录(按AsOfDate降序、AsOfTime降序排序,对应原SQL的order by逻辑)
  3. 处理空值与判断结果:用COALESCE处理无匹配记录的情况(默认返回0),再通过IF判断库存结余,返回对应结果

注意事项

  • 确保模型中tblDate与tblInventoryHistory的日期字段格式一致,或已建立正确的关系
  • 若用户同时选中多个值,SELECTEDVALUE会返回空值,可根据需求添加ISBLANK判断,例如默认返回0:
    RETURN IF(ISBLANK(SelectedLoc) || ISBLANK(SelectedItem) || ISBLANK(SelectedDate), 0, IF(OnHandValue <= 0, 0, 1))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:47:47