如何让David Bacci的PowerBI甘特图支持切片器筛选关联任务
解决David Bacci甘特图的关联任务切片筛选问题
默认表关系只能筛选直接匹配的任务,无法递归获取依赖链上的所有关联任务,需通过DAX计算列+视觉级筛选实现需求:
1. 确认依赖字段
确保甘特图主表(假设命名为GanttData)包含前置任务列(如前置任务),记录每个任务直接依赖的任务名称;若为多依赖,建议用逗号分隔后续处理。
2. 添加依赖链计算列
在GanttData中创建计算列,生成每个任务的完整依赖链(包含自身及所有上游依赖):
任务依赖链 = PATH(GanttData[任务名], GanttData[前置任务])
该列会生成类似任务B|任务A的字符串,代表任务A依赖任务B。
3. 配置切片器表关系
确认切片器独立表(假设命名为TaskSlicer)是通过DISTINCT(GanttData[任务名])生成的,且与GanttData基于任务名建立单向交叉筛选关系(筛选方向:从TaskSlicer指向GanttData)。
4. 创建显示控制度量值
编写度量值,判断当前任务是否属于选中任务的关联链(包含自身、前置依赖、依赖自身的任务):
显示任务 = VAR 选中任务 = SELECTEDVALUE(TaskSlicer[任务名]) RETURN IF( ISBLANK(选中任务), 1, -- 未选择时显示所有任务 -- 检查当前任务是否是选中任务/选中任务的前置/依赖选中任务 PATHCONTAINS(GanttData[任务依赖链], 选中任务) || PATHCONTAINS(PATHREVERSE(GanttData[任务依赖链]), 选中任务) )
5. 应用视觉级筛选
将显示任务度量值拖入David Bacci甘特图的视觉级筛选器,设置筛选条件为显示任务 = 1。
多依赖场景补充
若前置任务列是多值(如任务B,任务C),需先拆分依赖关系:
- 创建新表
任务依赖关系,用DAX拆分多依赖:
任务依赖关系 = GENERATE( GanttData, SELECTCOLUMNS( SPLIT(GanttData[前置任务], ","), "拆分后前置任务", [Value] ) )
- 用
任务依赖关系表替代原主表的前置任务字段,重新生成任务依赖链计算列即可。
内容的提问来源于stack exchange,提问作者Jojo Lo
相关产品推荐
相关产品推荐

