如何编写DAX度量值汇总主仓库与对应-SW子仓库的库存
DAX度量值实现主仓库与对应-SW子仓库库存求和
数据集
Warehouse Stock GH 6 NSWA 10 NSWA-SW 20 NSWA-01 5 QLDA 15 QLDA-SW 30 GSWG 40 WASA 10 WASA-SW 4 WASA-07 11
需求说明
需要编写DAX度量值,实现以下逻辑:
- 对所有后缀为
-SW的子仓库,以及它们对应的主仓库(比如NSWA对应NSWA-SW)的库存进行求和 - 其余小型分支仓库(如
NSWA-01、GH等)保留原库存值
解决方案DAX代码
SW Warehouse = VAR CurrentWarehouse = SELECTEDVALUE('Table'[Warehouse]) VAR IsSWWarehouse = RIGHT(CurrentWarehouse, 3) = "-SW" VAR MainWarehouse = IF(IsSWWarehouse, LEFT(CurrentWarehouse, LEN(CurrentWarehouse)-3), CurrentWarehouse) VAR HasSWChild = COUNTROWS(FILTER('Table', RIGHT([Warehouse], 3) = "-SW" && LEFT([Warehouse], LEN(MainWarehouse)) = MainWarehouse)) > 0 RETURN IF( HasSWChild || IsSWWarehouse, CALCULATE( SUM('Table'[Stock]), FILTER( ALL('Table'), [Warehouse] = MainWarehouse || (RIGHT([Warehouse], 3) = "-SW" && LEFT([Warehouse], LEN(MainWarehouse)) = MainWarehouse) ) ), SELECTEDVALUE('Table'[Stock]) )
代码逻辑解释
- CurrentWarehouse:获取当前上下文选中的仓库名称
- IsSWWarehouse:判断当前仓库是否是后缀为
-SW的子仓库 - MainWarehouse:如果是SW子仓库,提取其对应的主仓库名称(去掉末尾
-SW);否则直接用当前仓库名称 - HasSWChild:判断当前仓库是否存在对应的
-SW子仓库 - 返回逻辑:
- 如果当前仓库是SW子仓库,或者存在对应的SW子仓库,就计算该主仓库和其SW子仓库的库存总和
- 否则返回当前仓库的原库存值
验证结果
按上述度量值计算后,各仓库的结果如下:
- GH:6(无对应SW子仓库,保留原值)
- NSWA:30(10+20)
- NSWA-SW:30(10+20)
- NSWA-01:5(小型分支,保留原值)
- QLDA:45(15+30)
- QLDA-SW:45(15+30)
- GSWG:40(无对应SW子仓库,保留原值)
- WASA:14(10+4)
- WASA-SW:14(10+4)
- WASA-07:11(小型分支,保留原值)
内容的提问来源于stack exchange,提问作者Bhargav Varma
相关产品推荐
相关产品推荐

