首页 > 解决方案 > 使用 DAX 基于多对多关系映射值

问题描述

我有一种情况,我需要根据零件和工厂 ID 的组合将供应商值从一个表映射到另一个表。表格如下所示 -

表 A

在此处输入图像描述

表 B

在此处输入图像描述

现在基于工厂和零件编号 ID,我需要将供应商值从表 A 映射到表 B。

预期输出:

在此处输入图像描述

我试图在 DAX 中解决它,因为这两个表都不是基表,它们是作为汇总表派生的。因此,不会出现在 Power Query 的帮助下。

直到现在我还没有在 SQL 中尝试过这个,但是如果有人也可以用 SQL 来帮助我解决这个问题,那就完全可以了。

提前致谢!!

标签: sqlpowerbimappingdax

解决方案


如果我理解正确,您需要直接匹配。然后,当事情不匹配时,您想要“对齐”剩余的行。我建议union all用于此目的:

select a.plant, a.partnumber, a.supplier, b.supplier
from a join
     b
     on a.plant = b.plant and
        a.partnumber = b.partnumber and
        a.supplier = b.supplier
union all
select plant, partnumber, max(supplier), max(supplier_b)
from ((select a.plant, a.partnumber, a.supplier, null as supplier_b
              row_number() over (partition by plant, partnumber order by supplier) as seqnum
       from a
       where not exists (select 1
                         from b
                         where a.plant = b.plant and
                               a.partnumber = b.partnumber and
                               a.supplier = b.supplier
                        )
      ) union all
      (select b.plant, b.partnumber, null, b.supplier,
              row_number() over (partition by plant, partnumber order by supplier) as seqnum
       from b
       where not exists (select 1
                         from a
                         where a.plant = b.plant and
                               a.partnumber = b.partnumber and
                               a.supplier = b.supplier
                        )
       )
      ) ab
group by plant, partnumber, seqnum;

推荐阅读