如何在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())
使用说明
- 打开Power BI数据视图,选中需要处理的表
- 点击「新建列」,将上述代码粘贴进去,替换
'你的表名'为实际表名,确保列名与你的数据完全匹配 - 生成列后即可看到符合需求的标记结果
示例验证
假设示例数据如下:
| Key | Plant | Quantity | Movement Type | Posting Date | Target_Delete_Type1 | Target_Delete_Type2 |
|---|---|---|---|---|---|---|
| 100 | A | 5 | 351 | 2024-01-01 | ||
| 100 | B | -5 | 352 | 2024-01-02 | Delete | |
| 200 | C | 10 | 351 | 2024-02-01 | Delete | |
| 200 | C | -10 | 352 | 2024-02-01 |
执行上述DAX后,得到的标记结果与预期完全一致。
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

