如何在Power BI中基于子项汇总筛选含/不含Quality部门工时的项目?
在Power BI中按项目是否包含Quality部门工时筛选数据
先整理你的数据集如下:
| 项目 | 资源 | 部门 | 工时 |
|---|---|---|---|
| A | Dwight | Sales | 2 |
| C | Jim | Sales | 4 |
| A | Creed | Quality | 1 |
| B | Jim | Sales | 3 |
| D | Creed | Quality | 2 |
| D | Michael | Corporate | 8 |
方法1:用DAX计算列标记后筛选
这个思路对应SQL的EXISTS子查询逻辑,先给每条记录标记所属项目是否存在Quality部门工时,再通过标记筛选分组。
- 在数据视图中选中目标表,点击建模选项卡 → 新建列
- 输入以下DAX公式(替换
'表名'为你实际的表名称):
是否包含Quality工时 = VAR 当前项目 = '表名'[项目] RETURN IF( COUNTROWS( FILTER( '表名', '表名'[项目] = 当前项目 && '表名'[部门] = "Quality" ) ) > 0, "有Quality工时", "无Quality工时" )
- 生成计算列后,在报表视图中用该列作为筛选器:
- 选择"有Quality工时",得到项目A、D的所有记录
- 选择"无Quality工时",得到项目B、C的所有记录
方法2:用Power Query(M语言)拆分数据集
这个思路对应SQL的LEFT JOIN后筛选NULL的逻辑,先提取有Quality工时的项目列表,再和原表关联拆分。
- 点击主页选项卡 → 转换数据,进入Power Query编辑器
- 复制原始表:右键左侧面板的表 → 复制,重命名为
Quality项目列表 - 处理
Quality项目列表:- 筛选部门列等于"Quality"
- 移除项目列的重复值,只保留唯一的有Quality工时的项目
- 删除其他列,仅保留项目列
- 回到原始表,点击合并查询 → 合并查询作为新查询:
- 左表选原始表,右表选
Quality项目列表 - 匹配列均选项目,连接类型选左外部(第一个中的所有行,第二个中的匹配行)
- 左表选原始表,右表选
- 展开合并后的列,会得到一个新列(如
项目_Quality项目列表):- 列值不为空的行:对应项目存在Quality工时
- 列值为空的行:对应项目无Quality工时
- 基于该列筛选,即可拆分出两类数据:
- 筛选列值不为空 → 有Quality工时的项目记录
- 筛选列值为空 → 无Quality工时的项目记录
内容的提问来源于stack exchange,提问作者Dan Tappin
相关产品推荐
相关产品推荐

