当表格在当前月份没有行时,使用SUMX汇总PREVIOUSMONTH度量值

时间:2019-05-16 12:28:37

标签: dax

我正在尝试概述每月服务的员工,服务的员工数量和该月离职的员工数量。

我每月都有在职员工的概况,如下所示:

+----------+----------+------------+
|   date   | Employee | Department |
+----------+----------+------------+
| 1/1/2019 | A        | Sales      |
| 1/1/2019 | D        | Projects   |
| 2/1/2019 | A        | Sales      |
| 2/1/2019 | B        | Sales      |
| 2/1/2019 | C        | Marketing  |
| 2/1/2019 | D        | Projects   |
| 3/1/2019 | A        | Marketing  |
| 3/1/2019 | B        | Sales      |
| 3/1/2019 | C        | Marketing  |
| 3/1/2019 | D        | Projects   |
| 4/1/2019 | A        | Marketing  |
| 4/1/2019 | B        | Sales      |
+----------+----------+------------+

要计算一个月内在职员工的数量,请使用以下方法:

# Employees = COUNTROWS(Employees)

想法是使用PREVIOUSMONTH表达式查找上个月的雇员人数并将其与本月进行比较:

# Employees Last Month = CALCULATE([# Employees],PREVIOUSMONTH(DateTable[Date]))

然后可以使用以下公式轻松计算每月的净流入/流出:

Inflow/Outflow = [# Employees] - [# Employees Last Month]

将这些信息扔给每位员工一张表,可以得到我期望的概述:

enter image description here

我现在想每月将所有流入/流出= 1的雇员总计为流入,将流入/流出= -1的雇员总计为流出。这就是我遇到问题的地方。

我的流入量测似乎很好:

Inflow = 
SUMX (
    FILTER (
        ADDCOLUMNS (
            CROSSJOIN ( VALUES ( DateTable[MonthSort] ), VALUES ( Employees[Employee] ) ),
            "IO", [Inflow/Outflow]
        ),
        [IO] = 1
    ),
    [IO]
)

但流出度量不返回任何内容:

Outflow = 
SUMX (
    FILTER (
        ADDCOLUMNS (
            CROSSJOIN ( VALUES ( DateTable[MonthSort] ), VALUES ( Employees[Employee] ) ),
            "IO", [Inflow/Outflow]
        ),
        [IO] = -1
    ),
    [IO]
)

似乎在特定月份没有数据的雇员的上下文中,VALUES(Employee [Employee])表达式不返回任何值(使用测试度量),这可能解释了该问题:

TestEmployee = MAX(Employee[Employee])

enter image description here

我有什么想念的吗?作为计算表,这些表达式似乎可以正常工作。

1 个答案:

答案 0 :(得分:1)

介绍一个员工维度,其中仅包含唯一员工的属性(例如,他们的ID,他们的姓名-与其保持一致的任何内容)。非常明确地,该维度不应包含部门,因为部门会随着时间的推移而变化。

In =
COUNTROWS (
    FILTER (
        VALUES ( 'DimEmployee'[Employee] ),
        [Inflow/Outflow] = 1
    )
)

Out =
COUNTROWS (
    FILTER (
        ALL ( 'DimEmployee'[Employee] ),
        [Inflow/Outflow] = -1
    )
)

您发现某个特定日期不存在的员工。由于“ DimEmployee”没有日期上下文,因此没关系。