使用slicer过滤PATHCONTAINS
Use slicer to filter PATHCONTAINS
所以我和员工有一个 table。每个员工都有一个经理,使用 PATH 函数,我可以创建另一个列,将每个员工的管理追溯到 CEO(使用员工 ID 和经理的 ID)。例如,如果我的老板向首席执行官报告,我的员工路径将是“CEO ID | 我的老板 ID | 我的 ID”或“10001234|10002345|1000456。”
一旦我有了这个路径 selected,我需要能够根据人员列表(业务领导者)过滤我的数据。如果我 select 业务领导者 A,那么我希望我的数据只包括在员工路径中有业务领导 A 的人,即最终向他报告的人。我有一个单独的 table 商业领袖。这是我正在做的事情:
- 为每位员工创建路径:
empPath = PATH(EmployeeTable[Employee ID], EmployeeTable[Manager ID])
- 使用业务负责人 table 作为切片器(使用他们的 ID)
- 创建一个变量,selectedLeader,记录从切片器中生成的任何 selection 的值:
selectedLeader = IF(HASONEVALUE('LeaderTable'[Id]),VALUES('LeaderTable'[Id]),BLANK())
- 使用 PATHCONTAINS 将它们放在一起以过滤分配一个二进制指示符,这将允许我们过滤数据:
Filter =
var selectedLeader = IF(HASONEVALUE('LeaderTable'[Id]),VALUES('LeaderTable'[Id]),BLANK())
var empPath = PATH(EmployeeTable[Employee ID], EmployeeTable[Manager ID])
return IF(PATHCONTAINS(empPath, selectedLeader ),1,0)
然而,这给出了错误:测量中的计算错误:在预期单个值的地方提供了多个值的 table。
我一直在尝试使用公式,在 employeePath 上使用 VALUES、FIRSTNONBLANK 和其他聚合函数,但 none 正在按预期工作。感谢任何帮助!
问题是您的 PATH 函数需要行上下文才能按预期工作。如您所写,它不知道您使用 empPath 指的是 EmployeeTable 的哪一行。
试试这个:
Filter =
VAR selectedLeader = SELECTEDVALUE ( 'LeaderTable'[Id] )
VAR FilteredTable =
FILTER (
EmployeeTable,
PATHCONTAINS (
PATH ( EmployeeTable[Employee ID], EmployeeTable[Manager ID] ),
selectedLeader
)
)
RETURN
IF ( ISEMPTY ( FilteredTable ), 0, 1 )
如果您先在 EmployeeTable 上定义计算路径列,则可以提高效率。
Path = PATH ( EmployeeTable[Employee ID], EmployeeTable[Manager ID] )
然后度量简化为:
Filter =
VAR selectedLeader = SELECTEDVALUE ( 'LeaderTable'[Id] )
VAR FilteredTable =
FILTER ( EmployeeTable, PATHCONTAINS ( EmployeeTable[Path], selectedLeader ) )
RETURN
IF ( ISEMPTY ( FilteredTable ), 0, 1 )
所以我和员工有一个 table。每个员工都有一个经理,使用 PATH 函数,我可以创建另一个列,将每个员工的管理追溯到 CEO(使用员工 ID 和经理的 ID)。例如,如果我的老板向首席执行官报告,我的员工路径将是“CEO ID | 我的老板 ID | 我的 ID”或“10001234|10002345|1000456。”
一旦我有了这个路径 selected,我需要能够根据人员列表(业务领导者)过滤我的数据。如果我 select 业务领导者 A,那么我希望我的数据只包括在员工路径中有业务领导 A 的人,即最终向他报告的人。我有一个单独的 table 商业领袖。这是我正在做的事情:
- 为每位员工创建路径:
empPath = PATH(EmployeeTable[Employee ID], EmployeeTable[Manager ID])
- 使用业务负责人 table 作为切片器(使用他们的 ID)
- 创建一个变量,selectedLeader,记录从切片器中生成的任何 selection 的值:
selectedLeader = IF(HASONEVALUE('LeaderTable'[Id]),VALUES('LeaderTable'[Id]),BLANK())
- 使用 PATHCONTAINS 将它们放在一起以过滤分配一个二进制指示符,这将允许我们过滤数据:
Filter =
var selectedLeader = IF(HASONEVALUE('LeaderTable'[Id]),VALUES('LeaderTable'[Id]),BLANK())
var empPath = PATH(EmployeeTable[Employee ID], EmployeeTable[Manager ID])
return IF(PATHCONTAINS(empPath, selectedLeader ),1,0)
然而,这给出了错误:测量中的计算错误:在预期单个值的地方提供了多个值的 table。
我一直在尝试使用公式,在 employeePath 上使用 VALUES、FIRSTNONBLANK 和其他聚合函数,但 none 正在按预期工作。感谢任何帮助!
问题是您的 PATH 函数需要行上下文才能按预期工作。如您所写,它不知道您使用 empPath 指的是 EmployeeTable 的哪一行。
试试这个:
Filter =
VAR selectedLeader = SELECTEDVALUE ( 'LeaderTable'[Id] )
VAR FilteredTable =
FILTER (
EmployeeTable,
PATHCONTAINS (
PATH ( EmployeeTable[Employee ID], EmployeeTable[Manager ID] ),
selectedLeader
)
)
RETURN
IF ( ISEMPTY ( FilteredTable ), 0, 1 )
如果您先在 EmployeeTable 上定义计算路径列,则可以提高效率。
Path = PATH ( EmployeeTable[Employee ID], EmployeeTable[Manager ID] )
然后度量简化为:
Filter =
VAR selectedLeader = SELECTEDVALUE ( 'LeaderTable'[Id] )
VAR FilteredTable =
FILTER ( EmployeeTable, PATHCONTAINS ( EmployeeTable[Path], selectedLeader ) )
RETURN
IF ( ISEMPTY ( FilteredTable ), 0, 1 )