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

Power Query中IF判断函数执行结果全部返回0问题排查求助

问题原因

  1. 连等语法不符合M语言规则
    M语言不支持[字段1]=1=[字段2]=1这种连续相等判断,运算时会从左到右依次计算:
  • 先判断[quantitée facturée]=1,得到布尔值True或False
  • M语言中布尔值转数字时,True对应-1,False对应0,再拿这个结果和1判断相等,结果必然是False,所以最终永远返回0。
    你之前写的if [quantitée facturée]=1 and [quantité retournée]=1 then 1 else 0语法是正确的,但返回全0是因为第二个逻辑问题。
  1. 判断维度错误
    你当前的判断是行级判断,从你生成标识列的逻辑可以看出:
  • quantitée facturée是当行的SORMVT="700"时为1,代表发货记录
  • quantité retournée是当行的SORMVT="610"时为1,代表退回记录
    同一行不可能同时满足两个条件,所以两个值永远不可能同时为1,and判断永远为假,返回0。
    你的需求是标记「完成配送后被退回的订单」,这是订单维度的判断,需要先按订单聚合,判断同一个订单是否同时存在发货和退回记录。

解决方法

  1. 先按订单唯一标识(根据你的字段,可选NUM_CDE/NUMDOC,哪个是订单编号用哪个)分组,统计每个订单的总发货量、总退回量,同时保留原行数据。
  2. 对分组后的订单判断:如果总发货量>0且总退回量>0,标记为中性配送1,否则0。
  3. 展开保留的原行数据,得到带标记的完整表。

参考修改代码段

你可以在你现有M代码的in步骤之前插入以下逻辑,替换你之前写的标记列的相关代码即可:

// 按订单号分组统计发货、退回总量,保留原行
#"按订单分组" = Table.Group(#"Type modifié10", {"NUM_CDE"}, {
    {"订单总发货量", each List.Sum([quantité facturée]), Int64.Type},
    {"订单总退回量", each List.Sum([quantité retournée]), Int64.Type},
    {"原表行数据", each _, type table}
}),
// 标记中性配送
#"添加中性配送标记" = Table.AddColumn(#"按订单分组", "中性配送", each if [订单总发货量] > 0 and [订单总退回量] > 0 then 1 else 0, Int64.Type),
// 展开原行数据,列名根据你需要保留的字段调整
#"展开原行" = Table.ExpandTableColumn(#"添加中性配送标记", "原表行数据", {"CODART", "LIBELL", "QLIVRE", "NUMSER", "SORPCE_A", "CODCLI", "RAISOC", "NUMDOC", "CODOBJ", "CHRONO", "ENTPCE", "ENTMVT", "SORPCE_B", "SORMVT", "DATEMV", "SORPMR", "BL", "CHIRURGIEN", "CODREP", "PATIENT", "DATE_INTER", "ENTDAT", "SORDAT", "EMPDES", "LIBFOU", "BL 2", "Compteur BL", "année.mois inter", "Mouvement", "quantitée livrée", "quantité retournée", "quantité facturée", "Année"})

之后把in后面的内容改成#"展开原行"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:00