Power BI图表按Role拆分异常及表关系创建问题求助
看起来你遇到的核心问题是筛选上下文不匹配以及事实表之间无法直接建立关系导致的图表异常,下面一步步帮你解决:
1. 先理清表关系的正确配置
你提到无法直接在Actuals和Estimates间建关系,提示"必须有唯一值",这是因为这两个事实表的Project列都是重复值(一个项目对应多个Role),而关系要求其中一方的列是唯一的。所以必须通过Master Projects list作为中间维度表来关联:
- 确保
Master Projects list中的Project列是唯一值(如果不是,先做去重处理) - 建立以下两个多对一关系(筛选方向默认从维度表到事实表即可):
Master Projects list[Project]←Actuals[Project]Master Projects list[Project]←Estimates[Project]
这样当你用Master Projects list的Project做切片器时,能同时筛选Actuals和Estimates两个表的数据。
2. 创建共用的Role维度表
之前直接用两个事实表的Role字段做轴,会导致筛选上下文混乱(比如Estimates的Role筛选无法传递给Actuals,导致Actuals计算整个项目的总和)。我们需要一个共用的Role维度来统一筛选:
用DAX新建一个表:
Roles = DISTINCT(UNION(VALUES(Actuals[Role]), VALUES(Estimates[Role])))
这个表会包含Actuals和Estimates中所有不重复的Role值,作为统一的维度。
然后建立两个多对一关系:
Roles[Role]←Actuals[Role]Roles[Role]←Estimates[Role]
3. 创建度量值来计算工时
不要直接用事实表的Hours字段,而是创建两个度量值来确保筛选上下文正确:
Actual Hours = SUM(Actuals[Hours]) Estimated Hours = SUM(Estimates[Hours])
4. 配置图表
现在去创建簇状条形图:
- 轴:选择
Roles[Role](共用维度) - 值:添加
Actual Hours和Estimated Hours两个度量值 - 切片器:选择
Master Projects list[Project]
这样配置后,当你选择某个项目时,图表会按Role分别展示对应的Actual和Estimated工时,实现你要的"PM的Estimates与PM的Actuals并列"的效果。
为什么之前的配置会异常?
当你直接把Actuals[Role]和Estimates[Role]都放到轴上时,Power BI会把这两个字段视为独立的维度,筛选Estimates的Role时,Actuals没有对应的筛选条件,就会计算该项目下所有Role的工时总和,而不是对应Role的数值。通过共用Role维度表,我们让两个事实表共享同一个筛选上下文,就能得到正确的拆分结果。
内容的提问来源于stack exchange,提问作者Boba Fett

