PowerBI中如何从含多类查找类型的单表中匹配查找值?
嘿,完全懂你遇到的这个痛点!这种把多类查找清单都塞在一个表里的设计很常见,但确实会让刚接触PowerBI的朋友有点懵——毕竟常规的表间关系没法直接区分不同的lookup类别。不过你猜的没错,计算列就是完美的解决方案,我给你唠唠具体怎么弄:
先明确场景(方便你对应到自己的数据)
假设你的主查找表叫LookupMaster,字段是:
lookup name:区分不同的查找类别(比如"OrderStatus"、"PaymentMethod")lookup value:具体的取值代码(比如1、2、3)lookup description:对应的文字描述(比如"已完成"、"待支付")
你的业务数据表叫BusinessData,里面有个字段比如StatusID,就是要匹配LookupMaster里"OrderStatus"类别的取值。
方法1:用LOOKUPVALUE直接匹配(最直观)
在BusinessData里新建一个计算列,输入下面的DAX公式:
订单状态描述 = LOOKUPVALUE( LookupMaster[lookup description], LookupMaster[lookup name], "OrderStatus", // 限定要匹配的查找类别 LookupMaster[lookup value], BusinessData[StatusID] // 匹配业务表的取值 )
这个公式的逻辑很简单:告诉PowerBI,我要从LookupMaster里拿lookup description,但得同时满足两个条件——lookup name是"OrderStatus",且lookup value和当前行的StatusID一致。
注意:如果
lookup name+lookup value的组合是唯一的(也就是不会出现同一个类别下同一个取值对应多个描述的情况),这个方法最省心。
方法2:用CALCULATE+SELECTEDVALUE(处理可能的重复情况)
如果你的LookupMaster里可能存在重复的lookup name+lookup value组合(比如同一类别同一取值有多个描述),用LOOKUPVALUE会返回错误,这时候可以用更灵活的写法:
订单状态描述 = CALCULATE( SELECTEDVALUE(LookupMaster[lookup description], "发现重复匹配值"), LookupMaster[lookup name] = "OrderStatus", LookupMaster[lookup value] = BusinessData[StatusID] )
这里SELECTEDVALUE的作用是:如果筛选后只有一个匹配值,就返回它;如果有多个,就返回你指定的提示文本(比如上面的"发现重复匹配值"),不会直接报错,更友好。
批量处理多类查找
如果还有其他类别要匹配(比如支付方式),只要复制上面的公式,把lookup name的参数改成对应的类别名就行,比如:
支付方式描述 = LOOKUPVALUE( LookupMaster[lookup description], LookupMaster[lookup name], "PaymentMethod", LookupMaster[lookup value], BusinessData[PaymentMethodID] )
这样就能轻松搞定单表多类查找的匹配问题啦,是不是比想象中简单?
内容的提问来源于stack exchange,提问作者DavidMWilliams

