RELATED 函数的动手示例
现在我们来看看一些示例,了解 RELATED 在实践中的工作方式。
RELATED 的基本用法
假设我们有一张包含每月产品销量的表,但没有产品名称或类别,只有 ProductID。我们还有一张 Products 表,包含 ProductID、ProductName 和 Category。我们使用 ProductID 在这两张表之间创建关系。
我们希望按产品类别分析销量。为此,我们在 Sales 表中创建一个计算列,使用以下 DAX 公式,然后可将其添加到 Power BI 报告的可视化中:
ProductCategory = RELATED(Products[ProductCategory])
RELATED 非常适合这种场景,因为 Products 与 Sales 之间存在直接的一对多关系,便于提取 ProductName 或 Category。
高级场景
RELATED 在需要将相关表的数据引入当前表上下文时尤其强大。
在度量值中使用 RELATED,可根据报表当前的筛选上下文执行动态计算。度量值用于聚合计算,并可通过 SUMX 等行上下文函数纳入相关数据。
如果您还不熟悉 SUMX 函数,可以参考这篇完整的 SUMX 教程。
让我们基于之前的示例探讨一个更复杂的版本。假设您有包含多个不同价格产品的表,以及按产品且每月变化的动态销售目标。您的目标是跟踪不同产品类别在每个月相对于这些目标的销售表现。
在包含 Sales 与 Products 表的数据模型中,我们现在还加入一张 SalesTargets 表,其中包含每个产品的月度销售目标,包括 ProductID、Month 和 TargetAmount 列。
为正确使用 RELATED,我们基于复合键在 Sales 与 SalesTargets 两张表中建立关系,该复合键由 Product ID 与 Month 的组合构成。
目标是计算每个产品类别在每个月完成销售目标的百分比。
Monthly Target Achievement =
VAR TotalSalesRevenue =
SUMX(
Sales,
Sales[QuantitySold] * RELATED(Products[Price])
)
VAR MonthlyTarget =
SUMX(
Sales,
RELATED(SalesTargets[TargetAmount])
)
RETURN
IF(
MonthlyTarget > 0,
TotalSalesRevenue / MonthlyTarget,
BLANK()
)
该度量值通过遍历 Sales 表并使用 RELATED 获取每个产品的价格来计算 TotalSalesRevenue。随后,通过汇总 SalesTargets 表中相关月份和产品的目标金额来计算 MonthlyTarget。
最后,将总销售收入除以月度目标得到完成百分比,并确保仅在设定了目标时返回值(以避免被零除)。
您可以在 Financial Reporting in Power BI 技能路径中进一步学习财务数据分析,其中包含通过 Power BI 分析与可视化数据的动手示例。
Power BI 中的 RELATED 函数:最佳实践
既然我们已经熟悉了 RELATED 的工作方式,下面深入探讨一些最佳实践。
仅在需要时使用 RELATED
当您确实需要将其他表的数据纳入当前表上下文以进行计算时,再应用 RELATED。这对创建简化报表搭建的计算列尤其有用。
过度使用 RELATED 会导致数据模型不必要地复杂,并可能拖慢报表性能。如果可以直接通过可视化中的关系完成分析,而无需将数据实际引入您的表中,那通常更高效。
了解您的数据模型
在使用 RELATED 前,务必了解您的数据模型,尤其是表之间的关系。RELATED 需要一个已存在且处于活动状态的关系——通常是在“一对多”关系中,于“多”的一侧使用该函数从“一”的一侧拉取数据。
RELATED 不适用于多对多关系。
如果在未正确定义关系或误解关系方向性的情况下使用 RELATED,可能会导致错误或意外结果。
理解关系方向
使用 RELATED 将数据从主表(“一”侧)拉入相关表(“多”侧)。当您希望在计算或分析中包含来自其他表的查找数据时,这尤其有用。
在相反方向(从多到一)使用 RELATED 而缺乏恰当理解,可能造成困惑。对于反向方向,RELATEDTABLE 可能更合适,但它返回的是一张表,因此需要进一步的聚合函数。
RELATED 的替代方案
当 RELATED 无法满足您在 Power BI 中的需求时,您可以考虑一些替代方法。这里介绍两种替代方案:LOOKUPVALUE 函数与使用 Power Query 合并数据。
LOOKUPVALUE
LOOKUPVALUE 功能非常灵活,但可能比 RELATED 更慢。这是因为它会逐行在表中查找匹配项。在我们的示例中,可能成千上万甚至上百万的销售交易会显著拖慢报表性能。
在存在直接关系且需求简单的情况下,LOOKUPVALUE 可能显得过于复杂。不过,如果您需要更复杂的匹配条件、尚未建立关系,或对性能不敏感,LOOKUPVALUE 提供了更高的灵活性。
若想了解更多,可阅读这篇 DAX LOOKUPVALUE 全面指南。
使用 Power Query 合并数据
在 Power Query 中合并表,本质上是在合并时创建数据的静态快照。
但如果您的 Products 表经常更新(新增产品或更改类别),那么在未同时刷新 Products 与 Sales 两张表的情况下,您在 Power Query 中合并得到的表将不会自动反映这些更新。
合并后的表可能变得非常庞大,并可能拖慢报表性能,尤其是在您只需相关表中的一小部分数据(例如产品类别)时。
结论
RELATED 函数可根据关系从关联表提取数据,简化数据建模,免去手动合并的需要。这样,您便可创建动态纳入其他表数据的计算列与度量值。
为达到最佳效果,请战略性地使用 RELATED,仅在必要时将数据引入当前表上下文。清晰理解数据模型与既定关系至关重要。
如果您希望继续学习 Power BI,可参考以下资源:
FAQs
RELATED 函数能否与非活动关系一起使用?
不可以。RELATED 函数无法直接利用处于非活动状态的关系。RELATED 旨在与表之间的活动关系配合使用。
在 Power BI 模型中,两个表之间可以存在多条关系,但任一时刻仅能有一条处于活动状态。RELATED 函数会自动使用这条活动关系。
RELATED 函数能否用于度量值和计算列?
RELATED 通常用于计算列,但也可以用于度量值,尤其是在诸如 SUMX 之类的迭代函数中,本教程已作演示。
当用于度量值时,RELATED 会基于迭代函数建立的当前行上下文,从相关表获取数据。这使得度量值能够在其筛选上下文内跨相关表进行动态计算。
RELATED 函数能否跨多张表的关系链使用?
可以。只要链路中的每一环都正确建立了关系,RELATED 就能跨多张表沿着关系链进行遍历。这使 RELATED 能够通过中间表从复杂数据模型中提取数据。
筛选上下文如何影响 RELATED 在度量值中的使用?
当在度量值中使用时,RELATED 在既定的筛选上下文内运行,而筛选上下文可由切片器、可视化或 CALCULATE 等其他 DAX 函数修改。
RELATED 提取的值会反映当前的筛选上下文,因此具有动态性,能对报表中的变化做出响应。这使得与用户交互相适应的情境化计算成为可能。
数据建模是构建有洞察力的 Power BI 报告的基础。它使您能够定义清晰的表关系,并高效地组织、清洗与检索数据。在本教程中,您将了解 Power BI 中的
RELATED函数。通过动手示例,您将学习
RELATED函数如何提升您的数据建模与报表编制能力。如果您还是 Power BI 新手,可以先通过我们的 Power BI Fundamentals 技能路径熟悉相关主题。
您也可以下载 DAX 速查表,在学习更多 Power BI 与 DAX 时随手参考。
DataCamp DAX 速查表
什么是 Power BI 中的 RELATED 函数?
RELATED是一个 Power BI DAX 函数,可从相关表中的列提取值。关键在于,只有当当前表与目标列所在的表之间存在关系时,此函数才有效。RELATED函数通过允许您将不同表中的相关数据纳入模型,而无需手动合并或连接表,从而简化数据建模。以下是
RELATED函数的语法:举个简单的例子,假设您有一个销售(Sales)表和一个单独的产品(Products)表:
InvoiceID
ProductID
Quantity
Price
1000
123
2
21
1001
456
1
19.99
1002
123
3
31.5
1003
789
1
24.95
表 1. Sales(销售)
ProductID
ProductName
UnitPrice
123
Widget
10.5
456
Gear
19.99
789
Gizmo
24.95
表 2. Products(产品)
Sales 表记录销售交易,其中包含每笔销售的产品 ID,但不含产品名称或详细信息。Products 表包含与每个产品 ID 关联的名称与详细信息。
如果没有
RELATED,若要在 Sales 表内创建使用产品名称的计算列,您将不得不合并这两张表。使用
RELATED,您可以在 Sales 表中创建一个新列,直接从 Products 表提取并显示每笔销售对应的产品名称。您也可以在度量值中使用RELATED来动态获取这些信息。InvoiceID
ProductID
Quantity
Price
Product Name
1000
123
2
21
Widget
1001
456
1
19.99
Gear
1002
123
3
31.5
Widget
1003
789
1
24.95
Gizmo
表 3. 使用
RELATED理解 Power BI 中的关系
在 Power BI 中,关系允许您基于公共列将表连接起来。这些关系是 Power BI 将多个来源的数据集成到数据模型中的基础,使之具备关系型数据库的处理方式。
Power BI 中的关系类型
Power BI 中可能存在的关系类型包括:
关系对于 RELATED 函数的重要性
RELATED函数利用这些关系从相关表提取数据,并将其带入当前表的上下文。若没有正确定义的关系,RELATED将无法工作。关系为
RELATED提供了清晰的导航路径,确保函数明确知道从何处提取数据。良好的数据建模实践与清晰定义的关系可使
RELATED高效访问相关数据。这意味着您可以避免复杂的查找操作,提升 Power BI 报告的性能与可用性。