公式中的关系和查找
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])
查找之前 |
查找之后 |
||||||||||||||||||||||||||||||||||||||||||||
|
|
该函数使用链接表与 Employees 和 Resellers 表之间的关系获取报表中每行的正确名称。 还可以使用相关值进行计算。 有关详细信息和示例,请参阅 RELATED 函数。
检索相关值的列表
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 |
|
||||||||||
Associated Bikes |
|
注意 |
---|
由于 RELATEDTABLE 函数返回表,而非单个值,因此它必须用作对表执行操作的函数的参数。 有关详细信息,请参阅 RELATEDTABLE 函数。 |