Power BI中按BL分组筛选全610标识行统计完全退货订单量
解决方案
方案1:使用DAX度量值(推荐,适合直接用于可视化统计)
不需要提前修改原始表结构,直接编写度量值即可统计完全退货订单数量,代码如下:
完全退货订单数 = COUNTROWS( FILTER( VALUES('你的表名'[BL]), CALCULATE( COUNTROWS('你的表名') = CALCULATE(COUNTROWS('你的表名'), '你的表名'[SORMVT] = 610) ) ) )
- 逻辑说明:先提取所有不重复的订单编号,逐个判断该订单的总行数是否等于SORMVT为610的行数,相等即代表该订单所有行都处于退货状态,最后统计符合要求的订单总数。
- 优势:无需调整原始数据模型,编写完成后可直接拖入可视化组件使用,可动态响应页面筛选器。
方案2:使用M语言在Power Query中新增订单级标记列
M语言没有内置SWITCH函数,可通过分组聚合+if...else判断的方式实现订单标记,操作步骤如下:
- 打开Power Query编辑器,选中目标数据表
- 新增分组步骤,按BL字段分组,统计该订单的总行数、SORMVT=610的行数,参考M代码:
= Table.Group( 上一操作步骤的名称, {"BL"}, { {"订单总行数", each Table.RowCount(_), Int64.Type}, {"退货行数量", each Table.RowCount(Table.SelectRows(_, each [SORMVT] = 610)), Int64.Type} } )
- 新增自定义列判断是否为完全退货订单:
= Table.AddColumn( 分组步骤的名称, "是否完全退货", each if [订单总行数] = [退货行数量] then "是" else "否" )
- 将生成的标记列合并回原始数据表,后续可直接用该字段做筛选、统计。
补充说明
如果需要同时校验ENTMVT也为610(即仅统计已发货后完成全退的订单),只需在上述两种方案的判断逻辑中增加ENTMVT = 610的过滤条件即可。仅需统计全退订单数量时优先使用DAX度量值方案,性能更好、维护成本更低。
内容的提问来源于stack exchange,提问作者YannP
相关产品推荐
相关产品推荐

