Power BI实现排除切片值的时间序列平均值可视化需求
需求实现:指定序列与其他序列平均值(不含自身)的对比可视化
需求说明
需要创建可视化图表,默认展示事实表中所有Person的Score平均值;添加Person切片器,选中某Person时,该Person的Score平均值单独展示,同时整体平均值自动排除该Person的数据,实现「选中序列与其他序列平均值(不含自身)」的对比。
示例数据
| Date | Person | Score |
|---|---|---|
| 1/1/2023 | Bob | 140 |
| 1/1/2023 | Sarah | 125 |
| 1/1/2023 | Sam | 140 |
| 1/1/2023 | Alex | 155 |
| 2/1/2023 | Bob | 50 |
| 2/1/2023 | Sarah | 185 |
| 2/1/2023 | Sam | 200 |
| 2/1/2023 | Alex | 215 |
| 3/1/2023 | Bob | 230 |
| 3/1/2023 | Sarah | 245 |
| 3/1/2023 | Sam | 260 |
| 3/1/2023 | Alex | 275 |
| 4/1/2023 | Bob | 290 |
| 4/1/2023 | Sarah | 305 |
| 4/1/2023 | Sam | 320 |
| 4/1/2023 | Alex | 335 |
| 5/1/2023 | Bob | 350 |
| 5/1/2023 | Sarah | 365 |
| 5/1/2023 | Sam | 380 |
| 5/1/2023 | Alex | 395 |
实现方案(DAX度量值为主,无需计算表)
1. 创建独立的Person维度表
直接用事实表的Person列做切片器会过滤整个事实表,导致无法计算排除后的数据,所以先创建独立维度表:
Person维度 = DISTINCT('事实表'[Person])
(将事实表替换为你的实际表名)
2. 创建两个核心DAX度量值
选中人员得分平均值
选中人员得分平均值 = VAR 选中人员 = SELECTEDVALUE('Person维度'[Person]) RETURN CALCULATE( AVERAGE('事实表'[Score]), '事实表'[Person] = 选中人员 )
其他人员平均值(不含自身)
其他人员平均值(不含自身) = VAR 选中人员 = SELECTEDVALUE('Person维度'[Person]) VAR 总得分 = CALCULATE(SUM('事实表'[Score]), ALL('事实表')) VAR 选中人员得分 = CALCULATE(SUM('事实表'[Score]), '事实表'[Person] = 选中人员) VAR 总数据量 = CALCULATE(COUNT('事实表'[Score]), ALL('事实表')) VAR 选中人员数据量 = CALCULATE(COUNT('事实表'[Score]), '事实表'[Person] = 选中人员) RETURN IF( ISBLANK(选中人员), AVERAGE('事实表'[Score]), DIVIDE(总得分 - 选中人员得分, 总数据量 - 选中人员数据量) )
- 逻辑说明:未选中任何人员时,返回所有数据的平均值;选中人员后,用总得分减去选中人员得分、总数据量减去选中人员数据量,通过
DIVIDE安全计算排除后的平均值(避免除零错误)。
3. 可视化配置
- 添加切片器:选择
Person维度表的Person列作为筛选条件 - 创建图表(推荐簇状柱形图/组合图):将「选中人员得分平均值」和「其他人员平均值(不含自身)」拖入值区域,即可实现需求效果——默认展示整体平均值,选中人员后同时展示该人员平均值与其余人员平均值的对比。
内容的提问来源于stack exchange,提问作者ArbyWon
相关产品推荐
相关产品推荐

