DAX技术求助:按每22吨计数1次的公式结果异常排查
解决DAX中按22吨整数计数的问题
我来帮你排查下当前公式的问题,顺便给出更可靠的解决方案:
先看你当前公式的几个问题点:
- 重复的条件判断:
||两边都是SOP_LOM2_Deliveries[Mode] = "Truck",这属于冗余代码,虽然不会直接导致错误,但没必要重复写。 - 多余的
FLOOR(22,1):22本身就是整数,用FLOOR处理后结果还是22,完全可以直接写22。 - ROUNDDOWN的参数错误:你第二个参数用了
1,这会让结果保留1位小数(比如43吨的话,43/22≈1.95,ROUNDDOWN后会得到1.9),但你需要的是整数计数,这里应该把参数设为0,让结果向下取整到整数。
修正后的DAX公式
针对你的需求,我们可以简化并修正公式,这里提供两种等价的写法,你可以选自己习惯的:
写法1:用ROUNDDOWN(明确向下取整)
Available to Ship = IF ( SOP_LOM2_Deliveries[Mode] = "Truck", ROUNDDOWN ( SOP_LOM2_Deliveries[Tons] / 22, 0 ), 0 // 这里可以根据需求设置非Truck模式时的返回值,比如空或0 )
写法2:用INT函数(对正数来说等价于向下取整)
Available to Ship = IF ( SOP_LOM2_Deliveries[Mode] = "Truck", INT ( SOP_LOM2_Deliveries[Tons] / 22 ), 0 )
测试验证
针对你给出的案例:
- 当吨数为44时:
44/22=2,两种写法都会返回2,符合需求。 - 当吨数为43时:
43/22≈1.954,ROUNDDOWN到0位或INT处理后都会返回1,符合需求。 - 当吨数为21时:返回
0,符合“每满22吨计数1次”的规则。
如果你的数据中存在吨数为0或者负数的情况,可以再额外加个判断,确保结果不小于0:
Available to Ship = IF ( SOP_LOM2_Deliveries[Mode] = "Truck", MAX ( ROUNDDOWN ( SOP_LOM2_Deliveries[Tons] / 22, 0 ), 0 ), 0 )
内容的提问来源于stack exchange,提问作者Shaydra
相关产品推荐
相关产品推荐

