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

如何在Power BI中基于其他行标记待删除数据行?

Power BI 实现两类目标标记列的DAX方案

目标列1:跨Plant的正负抵消交易标记

逻辑说明

当Key重复,且存在另一行满足:

  • 该行Quantity为当前行的相反数
  • 两行Plant编码不同
    此时标记负数值行为Delete

DAX表达式

Target_Delete_Type1 = 
VAR CurrentKey = [Key]
VAR CurrentQty = [Quantity]
VAR CurrentPlant = [Plant]
-- 检查同Key下是否存在Plant不同、Quantity为相反数的行
VAR OppositeMatchExists = 
    CALCULATE(
        COUNTROWS('你的表名'),
        ALLEXCEPT('你的表名', '你的表名'[Key]),
        '你的表名'[Quantity] = -CurrentQty,
        '你的表名'[Plant] <> CurrentPlant
    ) > 0
RETURN
    -- 仅对负数值行标记Delete
    IF(CurrentQty < 0 && OppositeMatchExists, "Delete", BLANK())

目标列2:同Plant下351/352交易日期校验标记

逻辑说明

当Key重复且Plant编码相同时,若当前行Movement Type为351,且同Key同Plant下存在Movement Type为352的行,且当前行Posting Date不晚于352行的日期,则标记该351行为Delete

DAX表达式

Target_Delete_Type2 = 
VAR CurrentKey = [Key]
VAR CurrentPlant = [Plant]
VAR CurrentPostDate = [Posting Date]
VAR CurrentMoveType = [Movement Type]
-- 检查同Key同Plant下是否存在352行,且其日期不早于当前351行日期
VAR Valid352Exists = 
    CALCULATE(
        COUNTROWS('你的表名'),
        ALLEXCEPT('你的表名', '你的表名'[Key], '你的表名'[Plant]),
        '你的表名'[Movement Type] = 352,
        '你的表名'[Posting Date] >= CurrentPostDate
    ) > 0
RETURN
    -- 仅对符合条件的351行标记Delete
    IF(CurrentMoveType = 351 && Valid352Exists, "Delete", BLANK())

使用说明

  1. 打开Power BI数据视图,选中需要处理的表
  2. 点击「新建列」,将上述代码粘贴进去,替换'你的表名'为实际表名,确保列名与你的数据完全匹配
  3. 生成列后即可看到符合需求的标记结果

示例验证

假设示例数据如下:

KeyPlantQuantityMovement TypePosting DateTarget_Delete_Type1Target_Delete_Type2
100A53512024-01-01
100B-53522024-01-02Delete
200C103512024-02-01Delete
200C-103522024-02-01

执行上述DAX后,得到的标记结果与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:48:09