我有一个包含资源名称,资源所有者,项目名称,项目经理,努力的表格。 对于每个资源所有者,我想计算借出的努力(所有者的资源在所有者项目以外的项目中所花费的努力)和借来的努力(所有者的资源在其他项目中花费的努力,除了项目所有者)。
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
答案 0 :(得分:0)
您的问题有三种类型:
最简单的努力类型是“不借贷或借用” - 您关心的经理既是资源所有者又是项目经理(即他们使用他们管理的项目管理的资源)。
下一类工作是“借贷” - 您关心的经理是资源所有者,而不是项目经理(即经理的资源正用于其他人的项目)。
最后一种努力是“借来的努力” - 你关心的经理是项目经理而不是资源所有者(即他们在项目中使用别人的资源)。
您已经正确定义了贷款,但这是基于资源所有者是您关心的经理的假设。实际上,您的 Loaned Effort 计算对于 Borrowed Effort 也是完全正确的,除非您需要通过项目经理而不是资源所有者显示该表(这是因为项目经理借用和资源所有者借出 - 但除此之外它是相同的计算。)
因此,问题的本质不在于计算问题,而是因为您希望为同一个人并排显示“借用”和“借出”数字。< /强>
为了实现这一目标,我建议您有一个单独的,经过重复使用的经理人表,您可以计算借来的和借出的数字。这样做的主要原因之一是经理可以借钱但不借钱。如果你从资源所有者(谁借出)的前提开始,借用但从不贷款的经理将永远不会出现在你的结果中。
我使用单列 Manager 调用此表DimManager。你可以明显改变这一点。我不将此表与All_Activity Data相关联:
然后,对于这些措施,我开始时没有借出或借用,我希望经理既是项目经理又是资源所有者:
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正在进行两个不相关的表之间的连接。在这种情况下,我说我希望Manager既是项目经理又是资源所有者。嵌套的SUMX(CALCULATE(SUMX是这样的,在计算列总数时,它将每个单独管理器的结果相加。如果没有这个,该度量将使用MAX(Manager)作为列总计,使得列总数与经理X在你的样本数据中。我从Matt Allington那里学到了这个技巧: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]
)
)
)
这导致下面的最终结果: