首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2.7 PowerBI数据建模-DAX计算列中的几种VLOOKUP

2.7 PowerBI数据建模-DAX计算列中的几种VLOOKUP

原创
作者头像
PowerBI自己学_轻松
发布2025-02-24 19:53:24
发布2025-02-24 19:53:24
1.4K0
举报
文章被收录于专栏:PowerBI入门100例PowerBI入门100例

加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。

使用DAX在数据表中新建计算列,经常从另一个表中查找返回符合条件的值,类似于Excel的VLOOKUP,又高于Excel的VLOOKUP。

举例

以销量表和价格表为例,为销量表从价格表中查找返回产品的价格。

基于查找表(价格表)的3种形式,对应有3种方案。

方案1 两表之间存在一对一或多对一关系,用RELATED函数,与Excel的VLOOKUP最相似。

1 方向是多端查找一端

2 支持跨表的关系传递

3 性能优于其他方案

4 非活动的虚线关系不适用

价格表中每个产品只出现一次,每个产品只对应一个价格,存在多对一关系。

价格1 = RELATED('价格表1'[价格])

方案2 两表之间不存在关系,条件判断逻辑使用“等于”,用LOOKUPVALUE函数。

1 返回的值必须唯一,否则返回空或者预设结果(公式的最后一个参数)

2 支持多条件查找

价格表中产品的价格需要靠产品列和年份锁定唯一值。

价格2 = LOOKUPVALUE('价格表2'[价格],'价格表2'[产品],[产品],'价格表2'[年份],YEAR([日期]))

坑点:行数太多会莫名其妙整列返回空值。原因是:在某些情况下(比如数据量大),LOOKUPVALUE会因为CallbackDataID请求存储引擎查询,导致执行慢、低性能、丢数据。此时,请考虑方案3。

方案3 两表之间不存在关系,条件判断允许复杂逻辑,用CALCULATE+VALUES+FILTER,从一个无关系的表中筛选出唯一值。

1 返回的值必须唯一,否则会报错,如果业务本身就是唯一值,应显示报错并去更正数据源

2 如果接受返回任意一个值,可以用MAX或MIN替换VALUES取最大值或最小值

3 如果接受返回平均值,可以用AVERAGE替换VALUES

4 如果表之间有关系,可以使用ALL或REMOVEFILTERS清除关系,再进行筛选取值

价格表中产品出现多次,需要用指定的日期区间锁定唯一值。

价格3 =

CALCULATE(VALUES('价格表3'[价格]),

FILTER('价格表3',

'价格表3'[产品]='销量表'[产品] &&

'价格表3'[价格开始日期]<='销量表'[日期] &&

'价格表3'[价格结束日期]>='销量表'[日期]

)

)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档