2017-07-03 214 views
0

我有一个包含资源名称,资源所有者,项目名称,项目经理,工作量的表格。 对于每个资源所有者,我想计算借出的努力(业主资源在所有者项目以外的项目中所花费的努力)和借来的努力(除了项目所有者之外,所有者在其他项目中的资源所花费的努力)。Power BI:计算不正常

For e.g., Resource Owner = X 
Project Manager = AllExcept(X) 
Sum(Effort) = Loaned Out Hours 

Resource Owner = AllExcept(X) 
Project Manager = X 
Sum(Effort) = Borrowed. 

为了计算借出小时我用这DAX式 -

Loaned = IF(ISBLANK(CALCULATE(SUM('All_Activity Data'[Logged Effort]), FILTER('All_Activity Data','All_Activity Data'[Project Manager] <> 'All_Activity Data'[Resource Owner]))),0,CALCULATE(SUM('All_Activity Data'[Logged Effort]),FILTER('All_Activity Data','All_Activity Data'[Project Manager] <> 'All_Activity Data'[Resource Owner]))) 

用于计算借我用的 -

Borrowed = IF(ISBLANK(CALCULATE(SUM('All_Activity Data'[Logged Effort]),FILTER('All_Activity Data','All_Activity Data'[Project Manager] <> 'All_Activity Data'[Resource Owner]), FILTER('All_Activity Data','All_Activity Data'[Project Manager] = 'All_Activity Data'[Resource Owner]))),0,CALCULATE(SUM('All_Activity Data'[Logged Effort]),FILTER('All_Activity Data','All_Activity Data'[Project Manager] <> 'All_Activity Data'[Resource Owner]), FILTER('All_Activity Data','All_Activity Data'[Project Manager] = 'All_Activity Data'[Resource Owner]))) 

借出小时正确计算而不是借来的。任何帮助,将不胜感激。

下面是示例数据:

RN  Eff  PN P_M RO 
NAME 1 1.50 A O X 
NAME 2 8.00 B N S 
NAME 1 5.50 C N S 
NAME 2 1.50 D S S 
NAME 1 5.00 E X S 
NAME 2 8.00 F N N 
NAME 1 4.00 G L X 
NAME 2 4.00 H L X 
NAME 1 0.25 I X N 
NAME 2 0.25 G O X 
NAME 1 0.25 A X D 
NAME 2 6.75 B N X 
NAME 1 0.50 C X X 
NAME 2 8.00 D N L 
NAME 1 0.17 E D D 
NAME 2 2.26 F D D 
NAME 1 1.58 G L D 
NAME 2 2.50 H D D 
NAME 2 0.58 I D D 
NAME 1 0.33 G D D 
NAME 2 0.34 A D D 
NAME 1 0.25 B D D 
NAME 2 6.00 C D S 
NAME 1 0.30 D N S 
NAME 1 8.00 E N N 
NAME 2 2.00 F S S 
NAME 1 4.50 G S S 
NAME 2 1.50 H S S 
NAME 1 2.00 I S S 
NAME 2 1.50 G S S 
NAME 2 4.50 A S S 
NAME 2 8.00 B S S 
NAME 2 8.00 C S L 
NAME 2 8.00 D N S 
NAME 2 8.00 E S L 
NAME 2 8.00 F S L 
NAME 2 8.00 G O X 
NAME 2 1.25 H L L 
NAME 2 2.75 I L L 
NAME 1 0.75 G L L 
NAME 1 1.50 A L L 
NAME 1 0.75 B O L 
NAME 1 1.25 C O X 
NAME 1 0.50 D N X 
NAME 1 1.00 E X X 
NAME 1 2.00 F O X 
NAME 1 2.50 G S N 
NAME 1 7.00 H S N 
NAME 1 1.50 I L N 
NAME 2 6.50 G L N 
NAME 2 8.00 A N S 
NAME 2 8.00 B N X 
NAME 2 7.50 C L S 
NAME 1 3.25 D N N 
NAME 1 2.25 E N N 
NAME 1 0.75 F N N 
NAME 2 0.75 G N N 
NAME 1 1.00 H L X 
NAME 1 4.00 I S X 
NAME 1 3.00 G N X 
NAME 2 8.00 A L L 
NAME 1 6.00 B N N 
NAME 1 0.50 C N N 
NAME 1 0.50 D N N 
NAME 2 7.00 E N X 
NAME 1 0.25 F O X 
NAME 1 0.50 G O X 
NAME 1 0.25 H X X 

在这种区分 借出对于X PM是 - 52 在借用为 - 5.5 Loaned out

Borrowedin

+0

能否请您澄清究竟是什么问题呢? https://stackoverflow.com/help/mcve – user5226582

+0

计算后的数据与原始excel表单不匹配。计算度量公式不起作用。 – Sonali

+0

你可以添加一个例子吗?查看样本数据,结果和预期结果将非常有用。 – user5226582

回答

0

有3种类型努力在你的问题:

最简单的类型的电子商务ffort是“不借贷或借贷的努力” - 你关心的经理既是资源所有者又是项目经理。他们正在使用他们管理的项目管理的资源)。

下一种努力是“借贷努力” - 您关心的经理是资源所有者而不是项目经理(即经理的资源正在其他人的项目中使用)。

最后一种努力是“借来的努力” - 您关心的经理是项目经理,但不是资源所有者(即他们在他们的项目中使用别人的资源)。

您已经正确定义了借出的工作,但它是基于资源所有者是您关心的经理的假设。事实上,您的贷款努力计算是完全正确的借用努力太,除非你需要通过项目经理而不是资源所有者显示表(这是因为项目经理借用和资源所有者贷款 - 但否则它是相同的计算)。

Loaned is Borrowed

你的问题的实质,因此,不会与计算有问题,而是因为要显示“借”与“不借”的数量并排侧同一个人。

为了实现这个目标,我建议您制作一张单独的管理员表格,您可以计算借用和借出的数量。做这件事的主要原因之一是因为经理可能会借款但永远不会出借。如果您从资源所有者(借贷)的前提开始,那么借贷人永远不会出借的经理将永远不会出现在您的结果中。

我把这个表叫做DimManager,带有一列管理器。你显然可以改变这一点。我没有涉及此表All_Activity数据:

DimManager Table

然后,采取的措施,我开始不贷款或借来的,在这里我想经理既对项目经理和资源拥有者:

Not Loaned or Borrowed = 
SUMX (
    'DimManager', 
    CALCULATE (
     SUMX (
      FILTER (
       'All_Activity Data', 
       'All_Activity Data'[Project Manager] = MAX ('DimManager'[Manager]) 
        && 'All_Activity Data'[Resource Owner] = MAX ('DimManager'[Manager]) 
      ), 
      'All_Activity Data'[Logged Effort] 
     ) 
    ) 
) 

从内向外工作,FILTER是做两个不相关的表之间的连接。在这种情况下,我希望管理者既是项目经理又是资源所有者。嵌套的SUMX(CALCULATE(SUMX)是这样的,当计算一个列总和时,它总和每个管理器的结果,如果没有这个,测量将使用MAX(管理器)作为列总数,使得列总数与。在您的样本数据管理器X我学到了这一招马特 - 阿林顿:https://exceleratorbi.com.au/double-calculate-solves-sumx-problem/

为了您的借出和借入的计算,他们是完全同上,只是不要说你想同时你的资源所有者和项目经理匹配你的经理,他们中的一个不匹配你的经理:

Loaned = 
SUMX (
    'DimManager', 
    CALCULATE (
     SUMX (
      FILTER (
       'All_Activity Data', 
       'All_Activity Data'[Project Manager] <> MAX ('DimManager'[Manager]) 
        && 'All_Activity Data'[Resource Owner] = MAX ('DimManager'[Manager]) 
      ), 
      'All_Activity Data'[Logged Effort] 
     ) 
    ) 
) 

'

Borrowed = 
SUMX (
    'DimManager', 
    CALCULATE (
     SUMX (
      FILTER (
       'All_Activity Data', 
       'All_Activity Data'[Project Manager] = MAX ('DimManager'[Manager]) 
        && 'All_Activity Data'[Resource Owner] <> MAX ('DimManager'[Manager]) 
      ), 
      'All_Activity Data'[Logged Effort] 
     ) 
    ) 
) 

这导致下面的最终结果:

Final Result

+0

我可以不在我的All_Activity数据表中使用经理名称吗?当我使用All_Activity数据表的资源所有者作为经理时,借用变为空白。 – Sonali

+0

您的*借用的*方程在问题中存在矛盾。如果项目经理不等于资源经理**并且项目经理等于资源经理,那么您正在总结努力。由于任何行都不可能相等而且不相等,因此结果将始终为零。 – Leonard

+0

从理论上讲,有一种方法可以根据资源所有者获取一个*借用*等式来工作。计算将是* Loaned *等式,但您需要覆盖当前资源所有者的上下文过滤器,而是计算借给当前资源所有者的其他资源所有者的借出金额。然而,正如我在答案中所说的那样,这样做会减少不是资源所有者的项目经理所做的任何借贷。 – Leonard