PowerBI中无需双向筛选,按讲师聚合学分与学生数的方法
PowerBI多层级表聚合统计:无需双向筛选的实现方案
数据模型与需求
现有三张关联表
- Courses表(课程主表)
| Course ID | Course credits |
|---|---|
| C1 | 2 |
| C2 | 3 |
- Practical Courses表(实践课程表,事实表)
| Practical Course ID | Course ID | Year | Number of Students |
|---|---|---|---|
| C1.22 | C1 | 2022 | 10 |
| C1.23 | C1 | 2023 | 15 |
| C2.21 | C2 | 2021 | 17 |
- Practical course lecturers表(讲师表)
| Lecturer name | Practical Course ID |
|---|---|
| Jack | C1.22 |
| Jack | C1.23 |
| Jill | C1.22 |
| Jill | C2.21 |
关联规则与统计需求
- 关联逻辑:一门课程对应多个实践课程,一个实践课程对应多个讲师
- 统计需求:计算每位讲师的总学分和总学生数,目标结果如下:
| Lecturer name | Credits | Students |
|---|---|---|
| Jack | 4 | 25 |
| Jill | 5 | 27 |
当前困境
当前数据模型默认筛选方向为单向(维度表→事实表),无法通过讲师表反向筛选Courses表完成聚合。此前参考过相关线程的两个方案,但均不适用:
- 使用
CROSSFILTER定义临时筛选:多层级场景下需多次设置,操作繁琐 - 利用事实表公共字段:Courses表与讲师表无直接公共字段,无法直接关联
无需双向筛选的解决方案
使用DAX迭代函数,通过遍历关联表传递筛选上下文,无需修改模型筛选方向。
1. 讲师总学分DAX公式
讲师总学分 = SUMX ( RELATEDTABLE('Practical Courses'), // 获取当前讲师关联的所有实践课程 RELATED('Courses'[Course credits]) // 关联对应课程学分并累加 )
2. 讲师总学生数DAX公式
讲师总学生数 = SUMX ( RELATEDTABLE('Practical Courses'), 'Practical Courses'[Number of Students] // 累加关联实践课程的学生数 )
原理说明
RELATEDTABLE('Practical Courses'):基于当前讲师的筛选上下文,返回所有关联的实践课程记录RELATED('Courses'[Course credits]):通过实践课程与Courses表的关联,获取对应课程的学分值- 全程通过迭代函数在讲师的筛选范围内,逐层关联取数并聚合,无需开启双向筛选
内容的提问来源于stack exchange,提问作者Shaharg
相关产品推荐
相关产品推荐

