在 Excel 中创建两个表之间的关系

应用对象
Microsoft 365 专属 Excel Excel 2024 Excel 2021

是否曾使用 VLOOKUP 将列从一个表引入另一个表中? Excel 还包括一个内置数据模型,可用于在表之间创建关系,该模型是使用查找函数(如 VLOOKUP)的替代方法。 您可以创建两个数据表之间的关系,关系基于每个表中的匹配数据。 然后,可以使用每个表中的字段创建数据透视表和其他报表,即使这些表来自不同的源也是如此。 例如,如果您有客户销售数据,可能希望导入和关联时间智能数据,以便按年份和月份分析销售模式。

工作簿中的所有表都列在“数据透视表字段”列表中。

从数据模型中的多个表生成数据透视表时,最常使用关系。 这允许分析相关数据,而无需将其合并到单个表中。

注意

如果工作簿包含数据模型,则可以从“数据”选项卡管理表关系。

从关系数据库导入相关表时,Excel 通常会在后台构建的数据模型中创建这些关系。 对于所有其他情况,需要手动创建关系。

  1. 确保工作簿至少包含两个表,并且每个表都有一列可以映射到另一个表中的一列。
  2. 执行下列操作之 一:将数据格式化为表,或 将外部数据导入为 新工作表中的表。
  3. 为每个表指定一个有意义的名称:在 “表工具”中,单击“ 设计>表名称”> 输入名称。
  4. 验证一个表中的列具有唯一数据值且无重复项。 仅当一个列中包含唯一值时,Excel 才能创建关系。
    例如,若要将客户销售与时间智能关联,这两个表必须包含格式相同的日期 (例如 2026 年 1 月 1 日) ,并且至少有一个表 (时间智能) 列内仅列出每个日期一次。
  5. 选择“ 数据>关系”。

如果“关系”灰显,表示您的工作簿仅包含一个表。

  1. “管理关系”框中,选择“新建”。
  2. 在“创建关系”框中,单击“”的箭头,然后从列表中选择一个表。 在一对多关系中,此表应位于“多”方。 使用我们的客户和时间智能示例,您将首先选择客户销售表,因为在给定日期可能会发生多笔销售。
  3. 对于“列(外来)”,选择包含与“相关列(主要)”有关的数据的列。 例如,如果您在两个表中都已具有日期列,则现在就可以选择该列。
  4. 对于“相关表”,选择至少有一列数据与您刚为“”选择的表相关的表。
  5. 对于“相关列(主要)”,选择一列,此列应具有与您为“”选择的列中的值匹配的唯一值。
  6. 选择“确定”。

有关 Excel 中的表之间的关系的更多信息

关于关系的说明

  • 将不同表中的字段拖动到“数据透视表字段”列表时,你将知道是否存在关系。 如果未提示创建关系,则 Excel 已具有关联数据所需的关系信息。

  • 创建关系类似于使用 VLOOKUP:您需要包含匹配数据的列,以便 Excel 可以将一个表中的行与另一个表中的行进行交叉引用。 在时间智能示例中,“客户”表需要具有在时间智能表中也存在的日期值。

    • 在 Excel 的数据模型中,关系通常是一对一或一对多。 多对多关系需要额外的建模 (例如,使用查找表) 。 多对多关系会导致循环依赖项错误,例如“检测到循环依赖项”。如果在两个表之间建立直接连接(即多对多或间接连接 (每个关系中是一对多的表关系链,但在查看端到端) 时,则会发生此错误。 有关详细信息请参阅数据模型中的表格间的关系
  • 与查找公式不同,关系不会重复数据。 相反,它们链接表,以便每个表中的字段可以在数据透视表中一起使用。

  • 两个列中的数据类型必须兼容。 有关详细信息,请参阅 Excel 数据模型中的数据类型

  • 创建关系的其他方法可能更直观,特别是在不确定要使用哪一列的情况下。 请参阅在 Power Pivot 中的关系图视图中创建关系

“可能需要表之间的关系”

向数据透视表添加字段时,系统会通知你是否需要表关系来理解在数据透视表中选择的字段。

需要关系时显示“创建”按钮

尽管 Excel 可以告诉你何时需要关系,但它无法告诉你要使用哪些表和列,或者表关系是否可行。 请尝试执行下列步骤以获得所需的答案。

步骤 1:确定要在关系中指定的表

如果您的模型只包含几个表,则您需要使用哪些表可能显而易见。 但是对于较大模型,您可以使用一些帮助。 一种方法是使用 Power Pivot 加载项中的关系图视图。 关系图视图提供数据模型中所有表的可视表示形式。 使用关系图视图,您可以快速确定哪些表独立于模型其余部分。

关系图视图显示断开连接的表

注意

可以创建在数据透视表中使用时无效的不明确关系。 假设所有表都以某种方式与模型中的其他表相关联,但在尝试合并不同表中的字段时,会收到“可能需要表之间的关系”消息。 最有可能的原因是你遇到了多对多关系。 如果遵循连接到要使用的表的表关系链,您可能会发现您有两个或更多个一对多的表关系。 没有任何轻松的解决方法适合每种情况,但是您可以尝试创建计算列来将要使用的列合并为一个表。

步骤 2:查找可用于创建从一个表到下一个表的路径的列

确定哪个表与模型的其余部分断开连接后,请查看其列,以确定模型中其他位置的另一列是否包含匹配的值。

例如,假设您有一个模型包含各地域的产品销售情况,您后来导入了人口统计数据以查明每个地域的销售和人口统计趋势之间是否存在关联。 由于人口统计数据来自不同数据源,其表最初会与模型其余部分隔离开来。 若要将人口统计数据与模型的其余部分集成,需要在其中一个人口统计表中查找一个列,该列对应于你正在使用的人口统计表。 例如,如果人口统计数据是按地区进行组织的,并且您的销售数据指定了销售发生的区域,则您可以通过查找一个常见列(例如,省市自治区、邮政编码或地区)以提供查阅来关联两个数据集。

除了匹配值以外,创建关系有一些其他要求:

  • 查阅列中的数据值必须是唯一的。 换句话说,列不能包含重复项。 在数据模型中,Null 值和空字符串等同于空白,这是不同的数据值。 这意味着查找列中不能有多个 null。
  • 源列和查阅列的数据类型必须兼容。 有关数据类型的详细信息,请参阅数据模型中的数据类型

要了解有关表关系的详细信息,请参阅数据模型中的表格之间的关系

返回页首