公式中的关系和查找
PowerPivot for Excel 中的最强大功能之一是能够在表之间创建关系,然后使用相关表查找或筛选相关数据。通过使用随 PowerPivot for Excel(即数据分析表达式 (DAX))提供的公式语言,可以从表中检索相关的值。DAX 使用关系模型,因此可以轻松准确地检索其他表或列中的相关值或对应值。
您可以将进行查找的公式创建为计算列的一部分,或者作为在数据透视表或数据透视图中使用的度量值的一部分。有关详细信息,请参阅下列主题:
本节描述为查找提供的 DAX 函数,以及阐述如何使用这些函数的某些示例。
![]() |
---|
根据您要使用的查找操作或查找公式的类型,您可能需要先创建表之间的关系。有关创建关系的信息,请参阅表之间的关系。 |
了解查找函数
在当前表仅具有某种类型的标识符,但您需要的数据(如产品价格、名称或其他详细值)存储于相关表中的情况下,从其他表中查找匹配或相关数据的功能特别有用。在其他表中有多行与当前行或当前值相关时,查找函数也很有用。例如,您可以轻松地检索与特定区域、商店或销售人员关联的所有销售额。
与 Excel 查找函数(如 VLOOKUP,它们基于数组;或 LOOKUP,它们从多个匹配值中获取第一个匹配值)不同,DAX 遵循通过键联接的表中的现有关系以便获取完全匹配的单个相关值。DAX 也可以检索与当前记录相关的记录组成的表。
![]() |
---|
如果您对关系数据库很熟悉,则可以认为 PowerPivot 中的查找类似于 Transact-SQL 中的嵌套 subselect 语句。 |
有关在 PowerPivot 中使用的关系模型的详细信息,请参阅关系概述。
检索单个相关值
RELATED 函数可从其他表中返回与当前表中的当前值相关的单个值。您指定包含所需数据的列,该函数将通过两个表之间的现有关系从相关表的指定列中提取值。在某些情况下,该函数必须按照关系链来检索数据。
例如,假设您在 Excel 中具有今天的装运列表。但是,该列表只包含雇员 ID 号、订单 ID 号和发货人 ID 号,使得报表难于阅读。为了获取您想要的附加信息,您可以将该列表转换为一个 PowerPivot 链接表,然后创建与 Employee 和 Reseller 表的关系,并且将 EmployeeID 匹配到 EmployeeKey 字段,将 ResellerID 匹配到 ResellerKey 字段。
为了在您的链接表中显示查找信息,您添加两个使用以下公式的新计算列:
= RELATED('Employees'[EmployeeName])
= RELATED('Resellers'[CompanyName])
查找之前 |
查找之后 |
Order IDEmployeeIDResellerID
100314230445
10031515445
10031676108
EmployeeIDEmployeeReseller
230Kuppa VamsiModular Cycle Systems
15Pilar AckemanModular Cycle Systems
76Kim RallsAssociated Bikes
|
Order IDEmployeeIDResellerIDEmployeeReseller
100314230445Kuppa VamsiModular Cycle Systems
10031515445Pilar AckemanModular Cycle Systems
10031676108Kim RallsAssociated Bikes
|
该函数使用链接表与 Employees 和 Resellers 表之间的关系获取报表中每行的正确名称。还可以使用相关值进行计算。有关详细信息和示例,请参阅 RELATED 函数 (DAX)。
检索相关值的列表
RELATEDTABLE 函数通过现有关系返回包含指定表中所有匹配行的表。例如,假定您想要确定每个分销商在这一年度中下了多少订单。您可以在 Resellers 表中创建一个包含以下公式的新计算列,该公式在 ResellerSales_USD 表中查找每个分销商的记录,并且计算每个分销商所下订单数。这些表是 DAX 示例工作簿的一部分。有关示例数据的详细信息,请参阅获取 PowerPivot 示例数据。
=COUNTROWS(RELATEDTABLE(ResellerSales_USD))
在此公式中,RELATEDTABLE 函数首先获取当前表中每一行的 ResellerKey 值。(您无需在公式中的任意位置指定 ID 列,因为 PowerPivot 使用表之间的现有关系。)RELATEDTABLE 函数然后会从 ResellerSales_USD 表中获取与各分销商相关的所有行,并且对这些行进行计数。 请注意,如果在两个表之间不存在关系(直接或间接),则您将从 ResellerSales_USD 表获取所有行。
对于我们的示例数据库中的分销商 Modular Cycle Systems,在销售表中存在四个订单,因此该函数返回 4。对于 Associated Bikes,该分销商没有销售业绩,因此该函数返回空白。
分销商 |
销售表中针对此分销商的记录 |
Modular Cycle Systems |
分销商 IDSalesOrderNumber
445SO53494
445SO71872
445SO65233
445SO59000
|
Associated Bikes |
|
![]() |
---|
由于 RELATEDTABLE 函数返回表,而非单个值,因此它必须用作对表执行操作的函数的参数。有关详细信息,请参阅 RELATEDTABLE 函数 (DAX)。 |