使用Excel Power Query关联两表获取指定列的问题求助
问题说明
有两个Excel表格:
- 表1包含
Instance Full Name、DB Instance name等字段 - 表2包含
Full name、Status->name等字段
需要基于**表1的Instance Full Name(或实际匹配的DB Instance name)与表2的Full name**关联,从表2获取Status->name字段。之前尝试在表2中添加自定义列并使用#"table-1"[#"Status->name"]{0},但仅能取到固定行数据,无法得到关联匹配的结果。
表1数据
Organization Server name Contract OS Type Server Category Server Type Server Status DB Instance Status Environment CPU Cores Instance Full Name DB Instance name DB Software name Version Edition DB Instance size (GB) DB datasize (GB) CG Support XXXXX XXXXXX SV021 021 Linux Virtual_System Virtual Machine In Production In Production Production 1 8 DB-ODIPRD ODIPRD Oracle Database Server Oracle-12.1.0.2.0 Standard 733.21 670.43 Yes
表2数据
Full name Status->name Product category->name Software item->Smtc product catalog id type Managed by provider Collected date Description.1 Description.2 ODIPRD In Production DB Oracle Database Server Yes 21-02-2023 Oracle-12.1.0.2.0 Standard
预期结果
Instance Full Name Full Name Status->name DB-ODIPRD ODIPRD In Production
解决方法
方法1:Power Query合并查询(推荐)
这是最规范的关联匹配方式,步骤如下:
- 将两个表格导入Power Query编辑器(点击「数据」选项卡 → 「从表格/区域」)
- 在表1的编辑器界面,点击「主页」→「合并查询」→「合并查询作为新查询」
- 在合并窗口中:
- 上方选择表1,选中
Instance Full Name列(如果实际匹配逻辑是表1的DB Instance name与表2的Full name完全一致,这里选DB Instance name更准确) - 下方选择表2,选中
Full name列 - 连接类型选择「左外部(从第一个表获取所有行,从第二个表匹配行)」
- 点击「确定」
- 上方选择表1,选中
- 新查询中会生成一个合并列,点击列标题右侧的展开按钮,仅勾选
Status->name和Full name,点击「确定」 - 调整列顺序后即可得到预期结果
方法2:自定义列匹配函数
如果一定要用自定义列实现,不能直接取固定行数据,需要先筛选匹配行再取值。在表1中添加自定义列,使用以下公式:
let // 获取当前行的Instance Full Name,去掉前缀"DB-"得到匹配值 matchValue = Text.AfterDelimiter([Instance Full Name], "DB-"), // 从表2中筛选出Full name等于匹配值的行 matchedRows = Table.SelectRows(#"表2", each [Full name] = matchValue), // 提取匹配行的Status->name,无匹配则返回null status = if Table.RowCount(matchedRows) > 0 then matchedRows[#"Status->name"]{0} else null in status
之后可按需添加Full Name列,或直接通过合并查询完成更高效。
之前操作的问题说明
#"table-1"[#"Status->name"]{0}的逻辑是直接提取表1第一行的Status->name值,没有做任何关联匹配判断,因此无法得到对应行的结果。
内容的提问来源于stack exchange,提问作者Empty Coder
相关产品推荐
相关产品推荐

