这一篇讲一下LOOKUPVALUE函数,官方给它放在了筛选器函数里面,可能是它结合FILTER函数可以其他筛选表的作用吧。这个函数熟悉Excel的人还是有点眼熟,只是名字稍微不太一样,作用和Excel里面的vlookup很相似,都是用来根据两个表格相同字段来查找其他字段的。但是这个LOOKUPVALUE函数还是要更强大一点,Vlookup函数只能单条件匹配,LOOKUPVALUE函数可以多条件进行匹配,下面这个是语法↓
LOOKUPVALUE(
<result_columnName>,
<search_columnName>,
<search_value>
[, <search2_columnName>, <search2_value>]…
[, <alternateResult>]
)
简单解释一下,后面看一下案例就完全明白了↓
- result_columnName:需要查找返回的值,和Excel里面Vlookup顺序有点不一样,这个放在了第一个;
- search_columnName:查找值对应的关键字段;
- search_value:当前表格的关键字段;
- 后面中括号里面的可选参数就是在多条件下使用的;
- alternateResult:没有匹配上的默认值。
下面先演示一下单个关系的匹配,准备了两个表格,一个是省份、人员的表格;另一个是省份对应大区的表格,现在需要用LOOKUPVALUE函数,通过省份字段匹配出所属的大区,表格数据如下↓
然后通过LOOKUPVALUE函数把大区匹配过来,DAX语句如下,两个斜线数备注说明,不参与计算↓
所属大区 = LOOKUPVALUE(
'大区'[大区], //需要得到的值
'大区'[省份], //匹配表对应关键字段
'LOOKUP数据'[省份] //当前表关键字段
)
现在我们就通过省份匹配出了对应的大区,这里只使用了一个省份条件进行匹配。下面介绍一下两个条件匹配的效果,我们有一个省份、人员对应的销售数量表格,我们需要通过省份、人员两个字段来匹配出每个人在每个省份的销售数量,DAX语句如下↓
销售数量 = LOOKUPVALUE(
'维度数据'[数量],
//第一个匹配条件↓
'维度数据'[人员id],
'LOOKUP数据'[人员id],
//第二个匹配条件↓
'维度数据'[省份],
'LOOKUP数据'[省份]
)
现在我们完成了两个条件的匹配,当然多个条件方法也是一样的,只需要继续在后面增加字段对应关系就行了。
下面在讲一些特殊情况,如果没有匹配到对应的关系,就会默认返回空白值,比如我们把湖南的张三、李四两个人数据删了,上面那个公式返回的结果就是如下↓
我们也可以自定义没有查找到的值,比如我们把没有找到的值定义为999,DAX语句如下↓
销售数量 = LOOKUPVALUE(
'维度数据'[数量],
//第一个匹配条件↓
'维度数据'[人员id],
'LOOKUP数据'[人员id],
//第二个匹配条件↓
'维度数据'[省份],
'LOOKUP数据'[省份],
//没有匹配上的默认值
999
)
还有一个可能出现问题的地方,这也是和Excel里面vlookup很不一样的地方。如果出现了重复的值,我们没有指定返回的数据,就会报错。所以我们匹配的数据表最好不要有重复的值,不然数据很容易出现错误。我们把黑龙江的张三、李四复制一个,这两列就重复了,我们制定返回888,否则整列都会报错,DAX语句如下↓
销售数量 = LOOKUPVALUE(
'维度数据'[数量],
//第一个匹配条件↓
'维度数据'[人员id],
'LOOKUP数据'[人员id],
//第二个匹配条件↓
'维度数据'[省份],
'LOOKUP数据'[省份],
//重复或没有匹配上的默认值
888
)
End
,