Power BI Measure根据UPN相关属性进行过滤-过滤不正确

时间:2019-04-18 00:53:18

标签: powerbi dax

我正在尝试创建一种度量,将使用该报告的人员的成本以及直接为他们工作的雇员或为他们工作的经理工作的雇员的所有费用相加。

我的数据在事实表中有一个EmpID,我有一个维度表,其中包含EmpID及其关联的电子邮件,即他们的UPN。在我的测试中,使用View作为emp3@email.com的角色时,此计算得出EmpID为3:

Logged In EmpID = CALCULATE(MAX(dim_Employee[EmpID]),USERPRINCIPALNAME()=dim_Employee[UPN])

我还有另一种方法,该方法使用计算来计算成本,并使用过滤器来过滤此人的UPN的EmpID或该ID在“经理”或“主管”字段中。

myCost = CALCULATE(SUM(fact_Cost[Cost]),
FILTER(dim_Employee,
[EmpID]=[Logged In EmpID]
||dim_Employee[MgrID]=[Logged In EmpID]
||dim_Employee[DirectorID]=[Logged In EmpID]
)
)

使用emp3@email.com作为EmpID 3,这将导致$ 125。但是,结果显示仅为$ 15,这是EmpID为3的位置,因此看起来它没有选择过滤器的Mgr和DirID部分。

这是测试事实表,其中我要过滤的相关维度突出显示了当我将视图用作角色时希望通过过滤器捕获的值:

enter image description here

这是具有与经理和董事之间的员工关系的维度表:

enter image description here

更新:澄清应该显示$ 125的视觉效果是我没有任何其他数据的地方:

enter image description here

我尝试按照下面的第一个评论将ALL编织到过滤器中,但我仍然无法获得$ 15以上的收益。

当我将公式简化为经理或总监时,我会空白。因此,我无法获得[已登录EmpID] = [MgrID]或[DirectorID]的记录

Manager only where I get blank:
    myCost just Manager = 
    CALCULATE(SUM(fact_Cost[Cost]),
            FILTER(dim_Employee,
                dim_Employee[MgrID]=[Logged In EmpID]
                )
            )

并尝试使用全部:

   myCost Manager ALL = 
    CALCULATE (
        SUM ( fact_Cost[Cost] ),
        FILTER (
            ALL(dim_Employee[MgrID]),
                dim_Employee[MgrID] = [Logged In EmpID]
               )
            )

enter image description here

有什么想法我做错了什么,还是另一种方法?谢谢。

1 个答案:

答案 0 :(得分:0)

仅显示一名员工成本的原因:在您的视图中,行中有员工,经理和董事。这些行用作过滤器。因此,您当前的公式基本上会执行以下操作(我将使用第三行作为示例):

  • 过滤器表“ fact_Cost”,用于记录Employee = 3,Manager = 6和Director = 7(此过滤器请求来自您的视觉效果)。结果:具有此ID组合的一条记录。
  • 进一步过滤此记录,以获取Employee ID = 3,OR Manager_ID = 3或Director_ID = 3的信息。第一个条件为True,其他条件为false(因为6 <> 3、7 <> 3)。但是记录仍然存在。
  • 带有成本的剩余记录过滤器表,并将其汇总。由于我们只有1条记录,因此它显示了费用-15。

解决方案: 在应用“ OR”条件之前,您需要“删除”来自视觉的过滤器,以便您可以“查看”所有过滤器而不是1条记录。例如:

myCost =
VAR Login_ID = [Logged In EmpID]
RETURN
CALCULATE (
    SUM ( fact_Cost[Cost] ),
    FILTER (ALL(dim_Employee[EmpID],dim_Employee[MgrID],dim_Employee[DirectorID]),
        dim_Employee[EmpID] = Login_ID ||
        dim_Employee[MgrID] = Login_ID ||
        dim_Employee[DirectorID] = Login_ID
    )
)

在这里,我们首先从昏暗的Employee中需要访问的列中删除所有过滤器。然后,我们根据需要重新过滤这些列,并将结果记录集应用于成本表。

编辑:

上述措施正常工作。要对其进行测试,请使用特定的员工ID(即3:

)替换您的[Login In EmpID]度量值
    myCost =
    VAR Login_ID = 3
    RETURN
    CALCULATE (SUM ( fact_Cost[Cost] ), 
    FILTER (ALL(dim_Employee[EmpID],dim_Employee[MgrID],dim_Employee[DirectorID]),
            dim_Employee[EmpID] = Login_ID ||
            dim_Employee[MgrID] = Login_ID ||
            dim_Employee[DirectorID] = Login_ID
        )
    )

结果我已经进入您的pbix文件:

enter image description here

因此,您获得空白的唯一原因必须是[登录EmpID]度量-它未按预期返回“ 3”。这意味着 userprincipalname 函数未返回dim_Employee [UPN]的匹配字符串,换句话说,公式的这一部分:

USERPRINCIPALNAME()=dim_Employee[UPN]

无法正常工作。

我无法在台式机Power BI上测试此部分,因为我看不到您的登录信息。但是您可以自己轻松地做到这一点:创建一个显示用户名的度量:

User Name = USERPRINCIPALNAME()

,并仔细比较其结果与dim_Employee [UPN]列的内容。我的猜测是它们不会完全匹配。一旦弄清楚如何使它们相同,该公式将起作用。