使用slicer过滤PATHCONTAINS

Use slicer to filter PATHCONTAINS

所以我和员工有一个 table。每个员工都有一个经理,使用 PATH 函数,我可以创建另一个列,将每个员工的管理追溯到 CEO(使用员工 ID 和经理的 ID)。例如,如果我的老板向首席执行官报告,我的员工路径将是“CEO ID | 我的老板 ID | 我的 ID”或“10001234|10002345|1000456。”

一旦我有了这个路径 selected,我需要能够根据人员列表(业务领导者)过滤我的数据。如果我 select 业务领导者 A,那么我希望我的数据只包括在员工路径中有业务领导 A 的人,即最终向他报告的人。我有一个单独的 table 商业领袖。这是我正在做的事情:

  1. 为每位员工创建路径:empPath = PATH(EmployeeTable[Employee ID], EmployeeTable[Manager ID])
  2. 使用业务负责人 table 作为切片器(使用他们的 ID)
  3. 创建一个变量,selectedLeader,记录从切片器中生成的任何 selection 的值:selectedLeader = IF(HASONEVALUE('LeaderTable'[Id]),VALUES('LeaderTable'[Id]),BLANK())
  4. 使用 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 )