将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)
代码逻辑说明
- 变量定义:通过
SELECTEDVALUE获取用户在报表交互中选中的仓库、商品和日期值,对应原SQL函数的三个参数 - 筛选最新库存记录:使用
TOPN(1)配合FILTER,筛选出符合条件的最新库存记录(按AsOfDate降序、AsOfTime降序排序,对应原SQL的order by逻辑) - 处理空值与判断结果:用
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
相关产品推荐
相关产品推荐

