LOOKUPVALUE 是一个用于在其他表中查找并提取值的实用 DAX 函数。
尽管它不能替代在 Power BI 报告中的良好数据建模实践,但在编写具有多个条件的复杂表达式时,尤其是当您希望将 LOOKUPVALUE 与其他 DAX 函数组合使用时,LOOKUPVALUE 提供了很大的灵活性。
在本教程中,我们将带您了解 LOOKUPVALUE 函数的基础、其工作原理、如何使用它(特别是与其他 DAX 函数组合使用时),以及在 Power BI 报告中使用 LOOKUPVALUE 时的一些性能考量和最佳实践。
Power BI 中的 LOOKUPVALUE 与 Microsoft Excel 中的 VLOOKUP 十分类似。不过,在深入学习 LOOKUPVALUE 之前,建议先熟悉 DAX 和 Power BI。我们的 Power BI 基础 技能路径可以帮助您快速入门,而我们的 DAX 速查表 也是您在使用 DAX 函数时手边极佳的参考。
LOOKUPVALUE 基础
通过 LOOKUPVALUE 函数,我们可以基于一个或多个查找条件,从另一张表的一列中检索单个值。
其标准语法如下:
LOOKUPVALUE (
< result_columnName> ,
< search_columnName> ,
< search_value>
[, < search2_columnName> , < search2_value> ]…
[, < alternateResult> ]
)
技术支持
如果您还不熟悉 DAX 及其语法,请查看我们的 DAX 入门 课程,或快速阅读我们的DAX 新手教程 。您也可以通过我们的 DAX 进阶 课程来加深对 DAX 的理解。
下面更详细地介绍 LOOKUPVALUE 的各个参数:
result_column: 这是您希望从目标表中检索的列。
search_column1: 这是目标表中包含您要匹配条件的列。
search_value1: 这是在 search_column1 中要查找的值。它可以是固定值(如某段文本)、某个表达式的结果(如最小值或最大值),也可以是源表中的一列,LOOKUPVALUE 将据此进行匹配。
[search_column2, search_value2, ...]: 这是可选的额外搜索列与搜索值成对参数。您可以指定多个配对以创建更复杂的搜索条件。
[alternateResult]: 这是默认或备选结果。如果 LOOKUPVALUE 未找到合适匹配,将返回该值。
每次 LOOKUPVALUE 在目标表中执行搜索时,理应只找到唯一的一条匹配记录。如果存在多条可能匹配,您需要继续添加搜索配对,直到 LOOKUPVALUE 能够找到唯一匹配为止。
为便于理解,我们将在下一节讨论一个示例。
简单的 LOOKUPVALUE 示例
基本用法
假设您有一个产品表,包含 ProductID 和 ProductName 两列。您想要查找 ID 为 101 的产品名称。
Product_Name = LOOKUPVALUE(Products[ProductName], Products[ProductID], 101)技术支持
多重搜索条件
在本例中,假设您有一张 Sales 表,包含 ProductID、Region 和 Revenue 列。您想要查找某个特定产品(ID 为 101)在某个地区(East)的收入。
Product_Revenue = LOOKUPVALUE(Sales[Revenue], Sales[ProductID], 101, Sales[Region], "East")技术支持
处理空白值
当搜索条件未返回任何匹配时,LOOKUPVALUE 将返回空白。
以下是处理这些空白值的两种方法:
使用 LOOKUPVALUE 的备用结果参数。
使用 COALESCE 函数,在 LOOKUPVALUE 返回空白时指定一个替代结果。
方法一:备用结果
您可以在 LOOKUPVALUE 函数中指定一个默认值或备用结果。这是放在 LOOKUPVALUE 表达式末尾的可选参数。
Product_Name = LOOKUPVALUE(Products[ProductName], Products[ProductID], 101, "Not Found")技术支持
方法二:COALESCE
其次,您可以使用 COALESCE 函数,其效果与在 LOOKUPVALUE 中指定备用结果几乎完全相同。
不过,根据您的使用场景和数据集,COALESCE 可能具有更好的性能。如果您的 Power BI 报告对速度和性能有较高要求,那么值得尝试使用 COALESCE。
Commission Rate =
COALESCE(
LOOKUPVALUE(
'CommissionRates'[Rate],
'CommissionRates'[SalespersonID], SELECTEDVALUE('Sales'[SalespersonID])
),
0.05
)
技术支持
在表之间定义关系始终是良好的数据建模实践。与使用 DAX 函数 LOOKUPVALUE 相比,这样做更快,也能让您的语义模型在现在和未来都更易理解。
在创建了表之间的关系后,您就可以使用 RELATED 函数。在大多数情况下,RELATED 比 LOOKUPVALUE 更简单、更直接。
RELATED 函数非常适合在需要从与源表存在直接关系的另一张表中获取值时使用。
例如,如果您希望将客户姓名添加到销售表,且销售表与客户表在 CustomerID 上存在直接关系,您可以使用:
Customer Name = RELATED(Customers[CustomerName])技术支持
不过,`LOOKUPVALUE` 比 `RELATED` 更灵活,最适用于在模型中不存在直接关系时进行查找,或需要基于复杂或多个条件进行查找的场景。它功能多样,但请谨慎使用,因为可能会带来性能影响。
将 LOOKUPVALUE 与其他 DAX 函数组合
我们已经看到,您可以将 LOOKUPVALUE 与 COALESCE 结合使用,在未找到匹配时提供备用结果。
还有其他与 LOOKUPVALUE 搭配良好的 DAX 函数,例如 CALCULATE 和 SWITCH。
本节我们将通过示例进行说明。
LOOKUPVALUE 与 CALCULATE
当您需要基于某个计算或筛选上下文从另一张表检索值,而这一上下文无法通过简单关系或直接查找获得时,将 LOOKUPVALUE 与 CALCULATE 函数组合非常有用。
这通常用于应用筛选器或更改计算粒度。与 LOOKUPVALUE 结合时,您可以根据计算结果动态调整查找条件。
例如:假设您有一张表列出了某一年的产品及其销售目标。针对某个给定的产品 ID,您希望获取其当年的销售目标。
下面介绍如何通过组合使用 CALCULATE 和 LOOKUPVALUE 来实现这一点。
Product Sales Target =
VAR SpecificProductID = 123
VAR CurrentYear = YEAR ( TODAY( ) )
RETURN
CALCULATE(
LOOKUPVALUE(
SalesTargets[ SalesTarget] ,
SalesTargets[ ProductID] ,
SpecificProductID,
SalesTargets[ Year ] ,
CurrentYear
) ,
ALL ( SalesTargets)
) 技术支持
LOOKUPVALUE 与 SWITCH
当您需要动态地从另一张表查找值,并基于多种可能的匹配返回不同结果时,将 LOOKUPVALUE 与 SWITCH 函数组合会非常合适。
如果您不熟悉 SWITCH 函数 ,我们有一篇教程会为您做详细讲解。
例如:假设您有一份销售数据集和一张独立的佣金费率表。员工获得的佣金费率由其销售等级决定,这一等级并未直接存储,但可以通过其总销售额计算得出。
您希望在 Sales 表中创建一个计算列,基于销售等级给出每笔销售对应的佣金费率。
Commission Rate =
VAR SalesAmount = Sales[TotalSalesAmount]
VAR SalesTier =
SWITCH(
TRUE(),
SalesAmount <= 500, "Low",
SalesAmount <= 2000, "Medium",
"High"
)
RETURN
LOOKUPVALUE(
CommissionRates[CommissionRate],
CommissionRates[SalesTier],
SalesTier
)
技术支持
在这个 DAX 表达式中,我们使用 SWITCH 函数定义销售等级,然后将该结果传入 LOOKUPVALUE,以检索对应等级的佣金费率。
性能考量与最佳实践
1. 尽可能使用关系
应尽可能使用表之间的直接关系。Power BI 对关系做了性能优化,诸如 RELATED 之类的函数通常比 LOOKUPVALUE 更高效。
这种做法还能利用 Power BI 的内部优化,这对于尽量缩短报告加载时间非常重要。
2. 尽量减少在计算列中的使用
虽然 LOOKUPVALUE 可用于计算列,但通常不宜过度使用。计算列在数据刷新时计算,尤其在大型数据集中,可能会拖慢刷新过程。
考虑将 LOOKUPVALUE 用于度量值,此时计算在查询时执行,能够受益于查询优化。
3. 谨慎处理空白结果
LOOKUPVALUE 在未找到匹配时会返回空白。如前所述,在报告中选择合适的方法来处理这一情况很重要。您可以考虑使用 COALESCE 等函数,或利用 LOOKUPVALUE 的可选备用结果参数,在其返回空白时提供默认值。
4. 数据类型与大小写敏感
请确保搜索值与被搜索的列在数据类型上匹配,并注意大小写敏感性。数据类型或大小写不匹配,可能导致 LOOKUPVALUE 函数出现意外结果或错误。
结语
总之,LOOKUPVALUE 在从其他表查找并提取值时为您提供了更多选择。与其他 DAX 函数结合使用时,它尤其强大。但它并不能替代良好的数据建模实践,建议您首先在 Power BI 报告中尝试定义表之间的关系。
如果您正考虑成为一名 Power BI 开发者,欢迎查看我们的成为 Power BI 开发者的分步指南 。我们也鼓励您继续学习 Power BI,探索我们完整的 Power BI 数据分析师 职业路径,它将教会您上手使用 Power BI 所需的一切知识。
LOOKUPVALUE是一个用于在其他表中查找并提取值的实用 DAX 函数。尽管它不能替代在 Power BI 报告中的良好数据建模实践,但在编写具有多个条件的复杂表达式时,尤其是当您希望将
LOOKUPVALUE与其他 DAX 函数组合使用时,LOOKUPVALUE提供了很大的灵活性。在本教程中,我们将带您了解
LOOKUPVALUE函数的基础、其工作原理、如何使用它(特别是与其他 DAX 函数组合使用时),以及在 Power BI 报告中使用LOOKUPVALUE时的一些性能考量和最佳实践。Power BI 中的
LOOKUPVALUE与 Microsoft Excel 中的VLOOKUP十分类似。不过,在深入学习LOOKUPVALUE之前,建议先熟悉 DAX 和 Power BI。我们的 Power BI 基础技能路径可以帮助您快速入门,而我们的 DAX 速查表也是您在使用 DAX 函数时手边极佳的参考。LOOKUPVALUE 基础
通过
LOOKUPVALUE函数,我们可以基于一个或多个查找条件,从另一张表的一列中检索单个值。其标准语法如下:
如果您还不熟悉 DAX 及其语法,请查看我们的 DAX 入门课程,或快速阅读我们的DAX 新手教程。您也可以通过我们的 DAX 进阶课程来加深对 DAX 的理解。
下面更详细地介绍
LOOKUPVALUE的各个参数:LOOKUPVALUE将据此进行匹配。LOOKUPVALUE未找到合适匹配,将返回该值。每次
LOOKUPVALUE在目标表中执行搜索时,理应只找到唯一的一条匹配记录。如果存在多条可能匹配,您需要继续添加搜索配对,直到LOOKUPVALUE能够找到唯一匹配为止。为便于理解,我们将在下一节讨论一个示例。
简单的 LOOKUPVALUE 示例
基本用法
假设您有一个产品表,包含 ProductID 和 ProductName 两列。您想要查找 ID 为 101 的产品名称。
多重搜索条件
在本例中,假设您有一张 Sales 表,包含 ProductID、Region 和 Revenue 列。您想要查找某个特定产品(ID 为 101)在某个地区(East)的收入。
处理空白值
当搜索条件未返回任何匹配时,
LOOKUPVALUE将返回空白。以下是处理这些空白值的两种方法:
LOOKUPVALUE的备用结果参数。COALESCE函数,在LOOKUPVALUE返回空白时指定一个替代结果。方法一:备用结果
您可以在
LOOKUPVALUE函数中指定一个默认值或备用结果。这是放在LOOKUPVALUE表达式末尾的可选参数。方法二:COALESCE
其次,您可以使用
COALESCE函数,其效果与在LOOKUPVALUE中指定备用结果几乎完全相同。不过,根据您的使用场景和数据集,
COALESCE可能具有更好的性能。如果您的 Power BI 报告对速度和性能有较高要求,那么值得尝试使用COALESCE。LOOKUPVALUE 与 RELATED
在表之间定义关系始终是良好的数据建模实践。与使用 DAX 函数
LOOKUPVALUE相比,这样做更快,也能让您的语义模型在现在和未来都更易理解。在创建了表之间的关系后,您就可以使用
RELATED函数。在大多数情况下,RELATED比LOOKUPVALUE更简单、更直接。RELATED函数非常适合在需要从与源表存在直接关系的另一张表中获取值时使用。例如,如果您希望将客户姓名添加到销售表,且销售表与客户表在 CustomerID 上存在直接关系,您可以使用:
不过,`LOOKUPVALUE` 比 `RELATED` 更灵活,最适用于在模型中不存在直接关系时进行查找,或需要基于复杂或多个条件进行查找的场景。它功能多样,但请谨慎使用,因为可能会带来性能影响。
将 LOOKUPVALUE 与其他 DAX 函数组合
我们已经看到,您可以将
LOOKUPVALUE与COALESCE结合使用,在未找到匹配时提供备用结果。还有其他与
LOOKUPVALUE搭配良好的 DAX 函数,例如CALCULATE和SWITCH。本节我们将通过示例进行说明。
LOOKUPVALUE 与 CALCULATE
当您需要基于某个计算或筛选上下文从另一张表检索值,而这一上下文无法通过简单关系或直接查找获得时,将
LOOKUPVALUE与CALCULATE函数组合非常有用。这通常用于应用筛选器或更改计算粒度。与
LOOKUPVALUE结合时,您可以根据计算结果动态调整查找条件。例如:假设您有一张表列出了某一年的产品及其销售目标。针对某个给定的产品 ID,您希望获取其当年的销售目标。
下面介绍如何通过组合使用
CALCULATE和LOOKUPVALUE来实现这一点。LOOKUPVALUE 与 SWITCH
当您需要动态地从另一张表查找值,并基于多种可能的匹配返回不同结果时,将
LOOKUPVALUE与SWITCH函数组合会非常合适。如果您不熟悉 SWITCH 函数,我们有一篇教程会为您做详细讲解。
例如:假设您有一份销售数据集和一张独立的佣金费率表。员工获得的佣金费率由其销售等级决定,这一等级并未直接存储,但可以通过其总销售额计算得出。
您希望在 Sales 表中创建一个计算列,基于销售等级给出每笔销售对应的佣金费率。
在这个 DAX 表达式中,我们使用 SWITCH 函数定义销售等级,然后将该结果传入
LOOKUPVALUE,以检索对应等级的佣金费率。性能考量与最佳实践
1. 尽可能使用关系
应尽可能使用表之间的直接关系。Power BI 对关系做了性能优化,诸如
RELATED之类的函数通常比LOOKUPVALUE更高效。这种做法还能利用 Power BI 的内部优化,这对于尽量缩短报告加载时间非常重要。
2. 尽量减少在计算列中的使用
虽然
LOOKUPVALUE可用于计算列,但通常不宜过度使用。计算列在数据刷新时计算,尤其在大型数据集中,可能会拖慢刷新过程。考虑将
LOOKUPVALUE用于度量值,此时计算在查询时执行,能够受益于查询优化。3. 谨慎处理空白结果
LOOKUPVALUE在未找到匹配时会返回空白。如前所述,在报告中选择合适的方法来处理这一情况很重要。您可以考虑使用COALESCE等函数,或利用LOOKUPVALUE的可选备用结果参数,在其返回空白时提供默认值。4. 数据类型与大小写敏感
请确保搜索值与被搜索的列在数据类型上匹配,并注意大小写敏感性。数据类型或大小写不匹配,可能导致
LOOKUPVALUE函数出现意外结果或错误。结语
总之,
LOOKUPVALUE在从其他表查找并提取值时为您提供了更多选择。与其他 DAX 函数结合使用时,它尤其强大。但它并不能替代良好的数据建模实践,建议您首先在 Power BI 报告中尝试定义表之间的关系。如果您正考虑成为一名 Power BI 开发者,欢迎查看我们的成为 Power BI 开发者的分步指南。我们也鼓励您继续学习 Power BI,探索我们完整的 Power BI 数据分析师职业路径,它将教会您上手使用 Power BI 所需的一切知识。