RELATED()
和 RELATEDTABLE()
都是 DAX 中用来进行表之间的关系导航(relationship navigation)的函数,但它们的方向、作用对象和使用方式完全不同。下面我们来详细对比和解释一下:
✅ 一、RELATED 和 RELATEDTABLE 的基本区别
特性 | RELATED() |
RELATEDTABLE() |
---|---|---|
返回值类型 | 单个值(Scalar) | 一张表(Table) |
用途 | 获取主表(one)中的字段值 | 获取从表(many)中的所有相关行 |
应用场景 | 用在"多对一"关系的"多端" | 用在"多对一"关系的"一端" |
举例 | 订单表中查商品表的"商品名称" | 商品表中查对应商品的"所有订单" |
🧠 二、图解理解
假设有两张表:
1. 商品表
(Products)
商品ID | 商品名称 | 成本 |
---|---|---|
1 | 可乐 | 3 |
2 | 薯片 | 2 |
2. 销售表
(Sales)
销售ID | 商品ID | 销售金额 |
---|---|---|
101 | 1 | 5 |
102 | 1 | 5 |
103 | 2 | 4 |
✅ RELATED() 示例(从"销售表"中取"商品名称"):
DAX
商品名称 = RELATED(Products[商品名称])
- 你在 Sales 表里加这个列,就可以通过"商品ID"的关系,找到对应的商品名称。
- 是从"多端查一端"。
✅ RELATEDTABLE() 示例(从"商品表"中找"所有对应的订单"):
DAX
订单数量 = COUNTROWS(RELATEDTABLE(Sales))
- 你在 Products 表中写这个公式,可以查到每个商品卖出了几单。
- 是从"一端查多端"。
⚠️ 三、使用 RELATED 和 RELATEDTABLE 时要注意:
1. 表之间必须有"有效的关系"
无论用哪个函数,两个表之间都必须在模型中有建立关系,否则会报错。
2. 要注意函数使用的"方向"
RELATED()
:从多端 → 一端RELATEDTABLE()
:从一端 → 多端
如果方向错了,Power BI 会提示你不能使用。
3. 在度量值中常搭配 CALCULATE
使用
特别是 RELATEDTABLE()
,常用于配合 CALCULATE()
聚合子表数据。
🚀 四、组合用法示例
在 商品表
中,计算每个商品的总销售额:
DAX
总销售额 =
CALCULATE(
SUM(Sales[销售金额]),
RELATEDTABLE(Sales)
)
✅ 总结
对比点 | RELATED() |
RELATEDTABLE() |
---|---|---|
返回类型 | 单个值(scalar) | 一张表(table) |
用法方向 | 从"多端"查"主表" | 从"主表"查"多端" |
使用场景 | 销售表中查商品表字段 | 商品表中聚合相关订单数据 |
常用搭配 | 新建列、计算字段 | CALCULATE + 聚合函数(如 SUM , COUNTROWS ) |