PowerBI DAX:创建度量值时如何引用关联表实现跨表筛选?
跨表筛选计算运动员群体的居民占比
因为你已经通过Person和ID字段在Residency表与Athletes表之间建立了关联关系,直接在CALCULATE中引用关联表的筛选条件即可实现需求,DAX会自动利用表间关系传递筛选上下文。
核心公式实现
Per Housing First Year (Athletes) = DIVIDE( // 计算运动员群体中的居民数量 CALCULATE( COUNT(Residency[Resident]), Residency[Resident] = 1, Athletes[Athlete] = "Yes" ), // 计算运动员群体的总人数(作为占比分母) CALCULATE( COUNT(Residency[Resident]), Athletes[Athlete] = "Yes" ) )
关键说明
- 表间关系的作用:只要Residency与Athletes的关联是Active状态,
CALCULATE会自动通过Person-ID的关联,把Athletes表中Athlete="Yes"的筛选条件映射到Residency表对应的记录上。 - 分母的筛选必要性:必须给分母也加上运动员的筛选条件,这样计算的是运动员群体内部的居民占比,而非运动员居民数在全体居民中的占比。
- 非Active关系的处理:如果表间关系是Inactive状态,需要用
USERELATIONSHIP函数临时激活关系,公式调整如下:
Per Housing First Year (Athletes) = DIVIDE( CALCULATE( COUNT(Residency[Resident]), Residency[Resident] = 1, Athletes[Athlete] = "Yes", USERELATIONSHIP(Residency[Person], Athletes[ID]) ), CALCULATE( COUNT(Residency[Resident]), Athletes[Athlete] = "Yes", USERELATIONSHIP(Residency[Person], Athletes[ID]) ) )
可选验证方式
你也可以先在Residency表添加一个计算列,确认关联是否生效:
Is Athlete = RELATED(Athletes[Athlete])
之后用这个计算列替代关联表筛选,结果一致,但直接引用关联表筛选的写法更简洁高效。
内容的提问来源于stack exchange,提问作者M J
相关产品推荐
相关产品推荐

