11.2 LOOKUPVALUE


## LOOKUPVALUE LOOKUPVALUE( , , , [, ]…[ ] )| 参数 | 属性 | 描述 | | :—-: | :—-: | :—-: | | Result_ColumnName | | 要返回的值所在的列名。列必须使用标准 DAX 语法命名,通常是完全限定的,不支持表达式。 | | Search_ColumnName | 可重复 | 在与 Result_columnName 相同的表中或扩展表中,执行查找的现有列的名称,列必须使用标准 DAX 语法命名,通常是完全限定的。不支持表达式。 | | Search_Value | 可重复 | 标量表达式(不引用正在搜索的同一表中的任何列) | | Alternate_Result | 可选 | 当第一参数结果为空或多个不重复值时的替代结果,如果省略此参数,为空时返回 BLANK,多值返回错误 |

函数返回匹配所有 search_column 和 search_value 组合的行上的 result_column 的值。如果没有满足所有搜索值的匹配行,返回一个空白或 alternateResult(如果提供)。换句话说,如果只有部分条件匹配,函数将不会返回查找值。如果多个行匹配搜索值,并且它们的 result_column 值都相同,则返回该值。但是,如果 result_column 返回不同的值,则会返回错误或 alternateResult(如果提供)。LOOKUPVALUE 在引擎内部计算时使用以下语法:VAR SearchValue = RETURNCALCULATE (SELECTEDVALUE ( , ),FILTER (ALLNOBLANKROW ( ), == SearchValue),ALL ( ))## 示例用法 以下查询将 CAD 货币代码转换为相应的货币名称:EVALUATEROW (“Currency”, LOOKUPVALUE (Currency[Currency],Currency[Currency Code], “CAD”))11.2 LOOKUPVALUE - 图1LOOKUPVALUE 函数忽略现有的筛选上下文,直接在目标表中执行查找。当表达式在发生上下文转换的迭代环境中执行时,这种行为特别有用。你可以指定更多的列来执行匹配操作,还可以通过关系引用相关表的列。以下查询返回满足 Contoso 品牌、Deluxe 类别、颜色为银色的音频类别的产品:EVALUATEROW (“Product”, LOOKUPVALUE (Product[Product Name],Product[Color], “Silver”,Product[Brand], “Contoso”,Product[Class], “Deluxe”,’Product Category’[Category], “Audio”))11.2 LOOKUPVALUE - 图2如果有存在多行与搜索值匹配,结果将视情况而定:

  • 如果返回不同的值,函数将返回错误.
  • 如果返回唯一值,即使表中的多个行与搜索值匹配,LOOKUPVALUE 函数也只返回该唯一值。
  • 如果没有匹配的行,函数返回空白值。 例如,以下查询返回月份编号为 3 对应的月份名称,即使返回的值可能有几百行,但它们有相同的唯一值:EVALUATEROW (“Month Name”, LOOKUPVALUE (‘Date’[Month],’Date’[Month Number], 3))11.2 LOOKUPVALUE - 图3大多数情况下,当你有行上下文并且需要通过关系获取相关表某一列的值时,可以使用 RELATED 函数执行查找操作。但是,如果两个表在数据模型中没有可用关系,或者需要实现基于特定逻辑的查找时,可以使用 LOOKUPVALUE 代替 RELATED。某些情况下,你也可以使用 CALCULATE 函数重写 LOOKUPVALUE,但这并不是最佳实践。例如,可以按以下方式重写上面的查询:EVALUATEROW (“Month Name”, CALCULATE (VALUES ( ‘Date’[Month] ),’Date’[Month Number] = 3))