Power BI:计算不正常

时间:2017-07-03 11:23:18

标签: powerbi

我有一个包含资源名称,资源所有者,项目名称,项目经理,努力的表格。 对于每个资源所有者,我想计算借出的努力(所有者的资源在所有者项目以外的项目中所花费的努力)和借来的努力(所有者的资源在其他项目中花费的努力,除了项目所有者)。

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

1 个答案:

答案 0 :(得分:0)

您的问题有三种类型:

最简单的努力类型是“不借贷或借用” - 您关心的经理既是资源所有者又是项目经理(即他们使用他们管理的项目管理的资源)。

下一类工作是“借贷” - 您关心的经理是资源所有者,而不是项目经理(即经理的资源正用于其他人的项目)。

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

您已经正确定义了贷款,但这是基于资源所有者是您关心的经理的假设。实际上,您的 Loaned Effort 计算对于 Borrowed Effort 也是完全正确的,除非您需要通过项目经理而不是资源所有者显示该表(这是因为项目经理借用和资源所有者借出 - 但除此之外它是相同的计算。)

Loaned is Borrowed

因此,问题的本质不在于计算问题,而是因为您希望为同一个人并排显示“借用”和“借出”数字。< /强>

为了实现这一目标,我建议您有一个单独的,经过重复使用的经理人表,您可以计算借来的和借出的数字。这样做的主要原因之一是经理可以借钱但不借钱。如果你从资源所有者(谁借出)的前提开始,借用但从不贷款的经理将永远不会出现在你的结果中。

我使用单列 Manager 调用此表DimManager。你可以明显改变这一点。我将此表与All_Activity Data相关联:

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正在进行两个不相关的表之间的连接。在这种情况下,我说我希望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]
        )
    )
)

这导致下面的最终结果:

Final Result