Power BI使用DAX将Export表最新NR2值同步至Overview表
需求说明
现有两张表:
- Export表:包含重复物料编号(
Material)和NR2列,同一物料对应多条记录 - Overview表:每个物料编号唯一,包含
Nr列(示例中为NR 1)
需要在Overview表中新增一列,展示对应物料在Export表中的最新NR2值(无日期字段,取该物料的最后一条记录的NR2值)
示例数据
Export表
| Material | NR 2 |
|---|---|
| 123 | X |
| 123 | Y |
| 123 | Z |
| 456 | K |
| 456 | L |
| 456 | M1 |
| 789 | - |
| 789 | A |
| 789 | D |
目标Overview表
| Material | NR 1 | NR2 From Export |
|---|---|---|
| 123 | X | Z |
| 456 | K | M1 |
| 789 | D | D |
解决方案
1. SQL实现(数据库场景)
如果使用支持窗口函数的数据库(如MySQL 8.0+、PostgreSQL、SQL Server等),可以通过ROW_NUMBER()按物料分组排序,关联到Overview表:
WITH ranked_export AS ( SELECT Material, `NR 2` AS latest_nr2, ROW_NUMBER() OVER (PARTITION BY Material ORDER BY (SELECT NULL) DESC) AS rn FROM Export ) SELECT o.Material, o.`NR 1`, r.latest_nr2 AS `NR2 From Export` FROM Overview o LEFT JOIN ranked_export r ON o.Material = r.Material AND r.rn = 1;
注:
ORDER BY (SELECT NULL) DESC用于在无明确排序字段时,依托数据库默认存储顺序取最后一条记录;部分数据库可替换为表的主键字段,确保取到实际最后插入的记录。
如果是不支持窗口函数的旧版数据库(如MySQL 5.x),可使用关联子查询:
SELECT o.Material, o.`NR 1`, (SELECT `NR 2` FROM Export e WHERE e.Material = o.Material ORDER BY (SELECT NULL) DESC LIMIT 1) AS `NR2 From Export` FROM Overview o;
2. Excel实现(表格文件场景)
假设Export表数据在Sheet1的A:B列,Overview表在Sheet2的A:C列,在Sheet2的C2单元格输入以下公式,下拉填充即可:
=LOOKUP(2,1/(Sheet1!$A$2:$A$10=Sheet2!A2),Sheet1!$B$2:$B$10)
原理:
1/(Sheet1!$A$2:$A$10=Sheet2!A2)会生成匹配物料的位置为1、不匹配为错误值的数组,LOOKUP(2, ...)会定位到最后一个1对应的B列值,即该物料的最后一条NR2记录。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

