如何通过两个Slicer筛选From和To指定值之间的所有行?
解决Power BI中双切片器筛选路径行的问题
问题概述
使用两个切片器分别指定起点(From列值)和终点(To列值),筛选出原始表中两点之间的所有路径行;即使所选起点/终点不在原表的From/To列中,逻辑也需生效(无匹配路径时不显示任何行)。示例:选择起点A、终点D时,需返回A→B、B→C、C→D这三行。
原始数据(Table 1)
| ID | SentDate | From | To | ArrivalDate |
|---|---|---|---|---|
| 1 | 01.01.23 12:00 | A | B | 01.01.23 12:10 |
| 1 | 01.01.23 12:00 | B | C | 01.01.23 12:20 |
| 1 | 01.01.23 12:00 | C | D | 01.01.23 12:30 |
| 1 | 01.01.23 12:00 | D | E | 01.01.23 12:40 |
| 1 | 01.01.23 12:00 | E | F | 01.01.23 12:50 |
预期筛选结果(Table 2)
| ID | SentDate | From | To | ArrivalDate |
|---|---|---|---|---|
| 1 | 01.01.23 12:00 | A | B | 01.01.23 12:10 |
| 1 | 01.01.23 12:00 | B | C | 01.01.23 12:20 |
| 1 | 01.01.23 12:00 | C | D | 01.01.23 12:30 |
解决方案
1. 创建独立的站点维度表
不能直接用原表的From/To字段做切片器(会直接筛选原表,导致路径断裂),需创建包含所有站点的独立表:
站点表 = DISTINCT(UNION(SELECTCOLUMNS(Table1, "站点", Table1[From]), SELECTCOLUMNS(Table1, "站点", Table1[To])))
该表会提取原表中From和To的所有唯一值(示例中为A-F)。
2. 添加切片器
在报表页添加两个切片器,均绑定到「站点表」的「站点」字段,分别命名为起点选择和终点选择。
3. 编写路径判断度量值
创建DAX度量值,判断当前行是否在所选起点到终点的路径中:
是否在路径中 = VAR 选择起点 = SELECTEDVALUE('站点表'[站点], BLANK()) VAR 选择终点 = SELECTEDVALUE('站点表'[站点], BLANK()) VAR 当前From = MAX(Table1[From]) VAR 当前To = MAX(Table1[To]) VAR 前置路径集合 = CALCULATETABLE(VALUES(Table1[From]), PATHCONTAINS(PATH(Table1[To], Table1[From]), 当前From)) VAR 后置路径集合 = CALCULATETABLE(VALUES(Table1[To]), PATHCONTAINS(PATH(Table1[From], Table1[To]), 当前To)) RETURN IF( ISBLANK(选择起点) || ISBLANK(选择终点), 1, // 未选起点/终点时显示全部行 IF( PATHCONTAINS(PATH(Table1[To], Table1[From]), 选择起点) && PATHCONTAINS(PATH(Table1[From], Table1[To]), 选择终点) && 当前From IN 前置路径集合 && 当前To IN 后置路径集合, 1, 0 ) )
4. 应用视觉级筛选
给展示Table1的可视化表格添加视觉级筛选器,设置「是否在路径中」等于1。
补充说明
- 若所选起点/终点不在原表中,度量值返回0,不会显示任何行,符合需求逻辑。
- 本方案默认路径为线性链式结构,若存在分支路径,需调整DAX逻辑适配分支场景。
内容的提问来源于stack exchange,提问作者slowmoocow
相关产品推荐
相关产品推荐

