在 Power Query 中(或 MS 查询或者其他任何可以创建可刷新表格的东西,让我在 Excel 中获得所需的结果),我如何才能加入两个字段之间的部分匹配?
我想做类似以下 SQL 语句的事情:
SELECT T1.SIZES AS SIZES,
T2.PARTNO as PARTNO
FROM TABLE1 AS T1
LEFT JOIN TABLE2 AS T2
ON T2.APPLICATIONS LIKE '% ' T1.SIZES ' %'
例如:假设我有TABLE1
以下字段SIZES
- 尺寸
- P01
- P02
- P03
- P04
我有TABLE2
,其中包含以下字段PART NO
和APPLICATIONS
- 帕特诺__________应用
- 11111______________P01/P02
- 22222______________P02/P04
- 33333______________P01/P04
我想对 TABLE 1 和 TABLE2 进行左外连接,并返回TABLE1.SIZES
和之间有部分匹配的任何行TABLE2.APPLICATIONS
。结果如下:
- 尺寸___________零件编号
- P01______________11111
- P01______________33333
- P02______________11111
- P02______________22222
- P03______________无效的
- P04______________22222
- P04______________33333
我尝试遵循这个例子在 power query 中实现类似函数,并且能够创建公式,但不知道如何将其用作“查询合并”(连接)的条件。
我对 Power Query 完全是个新手……
答案1
我不会为此使用函数,我更喜欢使用最少/无代码的解决方案,因为它们更容易测试和维护。
我将首先针对 TABLE1 和 TABLE2 创建 2 个查询。我将使用每个查询上的“添加列”/“添加自定义列”按钮来添加一列。我将称之为虚拟匹配键并将公式设置为
= 1
现在回到 TABLE1 查询,我将添加合并步骤并加入到 TABLE2,使用虚拟匹配键,然后扩展 TABLE2 中的原始列。现在,您有一个巨大的交叉连接,即 TABLE1 中的每一行与 TABLE2 中的每一行。不要惊慌。即使在规模上,PQ 也能很好地处理这种情况,在我看来,它比 SQL 或专业 ETL 工具更好,后者往往需要大量内存。
无论如何,接下来我将使用添加列/添加条件列并指定:
新列名称:匹配行
如果(列)APPLICATIONS 包含(列)SIZES,则(值)是
这将只在匹配的行中为您提供一个值为“是”的列。过滤这些值并删除您不想要的任何列,您就完成了。
代码总行数 = 0。