如何在Power Query中通过另一表匹配值新增列?
在Power Query中通过匹配关联表为现有表新增列
需求:基于Site Name字段,用转换表(Table 1)的Code值为主数据表(Table 2)填充新列,完成后可通过该新列与其他表建立关系。
示例数据
转换表(Table 1)
| Site Name | Code |
|---|---|
| Los Angeles | LAX |
| Seattle | SEA |
| Chicago | ORD |
主数据表(Table 2,需新增列)
| Site Name | New Col |
|---|---|
| Los Angeles | |
| Seattle | |
| Chicago |
错误尝试代码
你之前的代码存在语法逻辑问题,比如错误引用列而非整张表、判断条件逻辑颠倒:
List.Max(Table.SelectRows(#"Table 1"[SiteName], (x) => x[Code] = #"Table 2"[SiteName]))
正确实现方法
方法1:使用Table.AddColumn结合Table.Lookup(推荐,简洁高效)
在Table 2的查询编辑器中添加自定义列,通过Table.Lookup匹配站点名称并返回对应Code:
Table.AddColumn( #"Table 2", "Code", (row) => Table.Lookup(#"Table 1", "Site Name", row[Site Name], "Code") )
- 说明:
(row)代表Table 2的当前行,row[Site Name]获取当前行的站点名称,随后在Table 1中匹配对应行并返回Code值。
方法2:可视化合并查询(无需大量代码)
- 在Power Query编辑器选中Table 2,点击主页→合并查询→合并查询作为新列
- 在弹窗中:
- 选择Table 1作为关联表
- 分别在两张表中选中
Site Name作为匹配字段 - 连接类型选择左外部(保留Table 2所有行,匹配Table 1对应行)
- 确定后,点击新列标题旁的展开按钮,仅勾选
Code列完成填充。
方法3:Table.AddColumn结合List.Select(灵活自定义筛选)
如果需要更复杂的筛选逻辑,可手动实现匹配:
Table.AddColumn( #"Table 2", "Code", (row) => let matchedRows = Table.SelectRows(#"Table 1", each [Site Name] = row[Site Name]), codeValue = if Table.RowCount(matchedRows) > 0 then matchedRows{0}[Code] else null in codeValue )
完成操作后,Table 2的新列会被正确填充Code值,后续可直接用该列与其他表建立关系。
内容的提问来源于stack exchange,提问作者Curtis Glardon
相关产品推荐
相关产品推荐

