Power BI 如何通过切片器选中值筛选层级字段包含该值的员工
按主管岗位ID筛选下属员工问题修复
业务规则说明
- 切片器可选值为主管的岗位ID,需要通过选中的ID筛选所有汇报给对应主管的员工
- 员工表内置层级文本字段
Org_Hierarchy_Array__c,存储格式为逗号分隔的ID字符串,包含该员工所有上级的岗位ID,单条数据示例:9000456, 90001571, 9000753, 9000411 - 筛选逻辑:切片器选中主管岗位ID后,仅展示
Org_Hierarchy_Array__c字段包含该ID的员工- 选中主管ID为
90001571时,层级字段为9000111, 90001571, 9000222, 9000333的员工符合要求,需要展示 - 层级字段为
9000111, 9000222, 9000333, 9000444的员工不符合要求,无需展示
- 选中主管ID为
原有代码问题
你编写的度量值存在两个核心问题,导致无法达到预期效果:
SELECTEDVALUE(Position[Org_Hierarchy_Array__c])仅在当前行上下文唯一对应单条员工记录时才会返回有效值,作为全局筛选逻辑时会失效- 直接用
SEARCH做模糊匹配会出现子串误匹配问题,比如主管ID为9000157时,会错误命中包含90001571的层级字段
修复方案
方案一:直接优化度量值(无需修改原有数据模型,适合小数据量场景)
替换原有度量值为如下代码:
是否归属选中主管 = VAR 选中主管ID = TRIM(SELECTEDVALUE(REF_ImplementationZone_tbl[ImplementationZone_PositionID])) RETURN // 未选中主管时默认展示所有员工,不需要可把返回的1改为0 IF(ISBLANK(选中主管ID), 1, COUNTROWS( FILTER('Position', // 前后加逗号避免子串误匹配 CONTAINSSTRING("," & TRIM('Position'[Org_Hierarchy_Array__c]) & ",", "," & 选中主管ID & ",") ) ) > 0 )
配置方法:把该度量值拖到你需要筛选的可视化图表的「筛选器」面板中,设置筛选条件为等于1即可生效。
方案二:性能优化方案(适合万级以上数据量场景)
建议在Power Query中将Org_Hierarchy_Array__c字段按逗号拆分为独立行,建立主管ID和员工ID的直接映射维度表,后续用关系筛选即可,性能比文本匹配高10倍以上。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

