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

是否曾用 VLOOKUP 将一个表中的某列转移至另一个表中?现在 Excel 中具有内置数据模型,VLOOKUP 已过时。 您可以创建两个数据表之间的关系,关系基于每个表中的匹配数据。然后您可以使用每个表中的字段创建 Power View 工作表、构建数据透视表和其他报告,即使在这些表源于不同来源时也是如此。例如,如果您有客户销售数据,可能希望导入和关联时间智能数据,以便按年份和月份分析销售模式。

工作簿中的所有表都会在数据透视表和 Power View 字段列表中列出。

您的浏览器不支持视频。 安装 Microsoft Silverlight、Adobe Flash Player 或 Internet Explorer 9。

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

  1. 确保工作簿至少包含两个表,并且每个表都有一列可以映射到另一个表中的一列。

  2. 将数据设置为表格式,或

    在新工作表中将外部数据作为表导入

  3. 为每个表提供一个有意义的名称:在“表格工具”下,单击“设计”>“表名称”> 输入名称。

  4. 验证一个表中的列具有唯一数据值且无重复项。 仅当一个列中包含唯一值时,Excel 才能创建关系。

    例如,要将客户销售与时间智能相关联,这两个表都必须包含相同格式(例如,1/1/2012),并且至少有一个表(时间智能)在列中各个日期仅列出了一次。

  5. 单击“数据”>“关系”。

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

  1. 在“管理关系”框中,单击“新建”。

  2. 在“创建关系”框中,单击“”的箭头,然后从列表中选择一个表。在一对多关系中,此表应位于“多”方。使用我们的客户和时间智能示例,您将首先选择客户销售表,因为在给定日期可能会发生多笔销售。

  3. 对于“列(外来)”,选择包含与“相关列(主要)”有关的数据的列。例如,如果您在两个表中都已具有日期列,则现在就可以选择该列。

  4. 对于“相关表”,选择至少有一列数据与您刚为“”选择的表相关的表。

  5. 对于“相关列(主要)”,选择一列,此列应具有与您为“”选择的列中的值匹配的唯一值。

  6. 单击“确定”。

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

关于关系的说明

示例:将时间智能数据与航班数据相关联

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

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

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

关于关系的说明

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

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

  • 在数据模型中,表关系可以是一对一的(每位乘客具有一个登机牌)或一对多的(每个航班具有许多乘客),但不能是多对多的。多对多关系会导致循环依赖关系错误,例如“检测到循环依赖关系”。如果在两个多对多表之间创建直接连接或者创建间接连接(一个表关系链,即每个关系是一对多的,但是当从头至尾查看时是多对多的),就会发生此错误。有关详细信息请参阅数据模型中的表格间的关系

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

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

示例:将时间智能数据与航班数据相关联

您可以使用 Microsoft Azure Marketplace 上的免费数据了解表关系和时间智能。其中某些数据集非常大,需要快速 Internet 连接才能在合理的时间内完成数据下载。

  1. 启动 Microsoft Excel 中的 Power Pivot 加载项并打开 Power Pivot 窗口

  2. 单击“获取外部数据”>“来自数据服务”>“来自 Microsoft Azure Marketplace”。Microsoft Azure Marketplace 主页将在表导入向导中打开。

  3. 在“价格”下,单击“免费”。

  4. 在“类别”,单击“科学与统计”。

  5. 查找“DateStream”,然后单击“订阅”。 有关此时间智能数据源的更多信息。

  6. 输入您的 Microsoft 帐户,然后单击“登录”。数据预览应显示在窗口中。

  7. 滚动到底部,然后单击“选择查询”。

  8. 单击“下一步”

  9. 选择“BasicCalendarUS”,然后单击“完成”以导入数据。通过快速 Internet 连接,导入应在一分钟左右完成。完成后,您应看到状态报告表明已传输 73,414 行。单击“关闭”。

  10. 单击“获取外部数据”>“来自数据服务”>“来自 Microsoft Azure Marketplace”以导入第二个数据集。

  11. 在“类型”下,单击“数据”。

  12. 在“价格”下,单击“免费”。

  13. 查找“US Air Carrier Flight Delays”,然后单击“选择”。

  14. 滚动到底部,然后单击“选择查询”。

  15. 单击“下一步”

  16. 单击“完成”以导入数据。通过快速 Internet 连接,这可能需要 15 分钟即可导入。完成后,您应看到状态报告表明已传输 2,427,284 行。单击“关闭”。现在,您应该在数据模型中具有两个表。要关联它们,我们需要每个表中兼容的列。

  17. 请注意,BasicCalendarUSDateKey 的格式为 1/1/2012 12:00:00 AM。On_Time_Performance 表还具有一个日期时间列 FlightDate,其值是以相同格式 1/1/2012 12:00:00 AM 指定的。两列包含匹配数据,具有相同的数据类型,并且至少一列 (DateKey) 仅包含唯一值。在后续诸多步骤中,您将使用这些列来关联表。

  18. 在 Power Pivot 窗口中,单击“数据透视表”以在新工作表或现有工作表中创建数据透视表。

  19. 在“字段列表”中,展开 On_Time_Performance 并单击 ArrDelayMinutes 以将其添加到“值”区域。在数据透视表中,您应该会看到航班延迟的总时间量,以分钟为单位。

  20. 展开 BasicCalendarUS 并单击 MonthInCalendar 以将其添加到“行”区域。

  21. 请注意,数据透视表现在列出了月份,但是每个月的分钟数总和相同。再次说明,相同的值表明需要关系。

  22. 在“字段列表”中,在“可能需要表之间的关系”中单击“创建”。

  23. 在“相关表”中选择 On_Time_Performance,在“相关列(主要)”中选择 FlightDate

  24. 在“表”中选择 BasicCalendarUS,在“列(外来)”中选择 DateKey。单击“确定”以创建关系。

  25. 请注意,每个月的延迟分钟数总和现在不同。

  26. BasicCalendarUS 中,将 YearKey 拖动到“行”区域的 MonthInCalendar 上方。

现在,您可以按年和月或者日历中的其他值对到达延迟进行切片。

提示: 默认情况下,月份按字母顺序列出。使用 Power Pivot 加载项可以更改排序,以便月份按时间顺序显示。

  1. 确保 BasicCalendarUS 表在 Power Pivot 窗口中打开。

  2. 在主表上,单击“按列排序”。

  3. 在“排序”中,选择 MonthInCalendar

  4. 在“依据”中,选择 MonthOfYear

现在,数据透视表将按照一年中的月份编号(10、11)对每个月份-年份组合进行排序(2011 年 10 月、2011 年 11 月)。更改排序顺序非常简单,因为 DateStream 源提供了使此方案工作的所有必要列。如果您使用的是不同时间智能表,则步骤将会有所不同。

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

当向数据透视表添加字段时,如果需要表关系来让您在数据透视表中选择的字段有意义,您将收到通知。

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

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

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

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

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

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

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

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

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

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

  • 查阅列中的数据值必须是唯一的。换句话说,列不能包含重复值。在数据模型中,Null 值和空字符串等同于空白,这是不同的数据值。这意味着无法在查阅列中有多个 Null 值。

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

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

返回页首

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×