基于 Excel PowerPivot 使用 DAX 的最新值的行数

Count of Rows Based on Their Most Recent Value in Excel PowerPivot Using DAX

是否可以根据 PowerPivot table using DAX 中字段的最新值来获取不同的行数?

我有一个交易 table 可以跟踪专业人员的聘用和调动日期。我想根据他们最近的办公室统计专业人员的数量。通过这种方式,作为通过组织的专业调动,我们可以看到他们在给定时刻的位置。

交易Table:

Name  | Action   | EffectiveDate | Office
-----------------------------------------
Peter | Hire     | 1/10/2014     | STL
John  | Hire     | 2/5/2014      | STL
John  | Transfer | 3/2/2014      | LAX
Jason | Hire     | 6/4/2014      | STL
John  | Transfer | 9/10/2014     | CHI

期望输出:

Office | Distinct Count
-----------------------
CHI    | 1
STL    | 2
-----------------------
Total  | 3

我创建了一个使用 DISTINCTCOUNT 函数的度量。这样我就可以得到正确的总计,但各个办公室的总计并不像我想要的那样。我知道我下面的公式正在做我要求的事情。但是,我不确定如何根据最近的生效日期 return 使其成为专业办公室

DistinctCount:=DISTINCTCOUNT(TransactionTable[Name])

这是使用我创建的 DistinctCount 度量的输出

我假设我将不得不使用 CALCULATE function and apply a FILTER 功能来获取不同的专业人士最近的办公室,但我不确定它看起来如何。

DistinctCountPerOffice:=CALCULATE (
    DISTINCTCOUNT(TransactionTable[Name]),
    FILTER (
        ?.....?
    )
)

此外,我们希望此数据按月或季度分段。这将使我们能够看到每个办公室 cumulative count over time。我们有一个 table 定义月、季度和年的日期。

日期 Table:

CalendarDate | Month Key | Month Name | Quarter Name | Year
-----------------------------------------------------------
1/1/2014     | 1.00      | Jan        | Q1           | 2014
1/2/2014     | 1.00      | Jan        | Q1           | 2014
...
2/1/2014     | 2.00      | Feb        | Q1           | 2014
....
8/1/2014     | 8.00      | Aug        | Q3           | 2014
..
9/2/2014     | 9.00      | Sep        | Q3           | 2014
..
12/16/2014   | 12.00     | Dec        | Q4           | 2014

我已经能够完成这方面的时间分段,但计数不是基于专业人员最近的办公室

Cumulative DistinctCount:=CALCULATE (
    DISTINCTCOUNT(TransactionTable[Name]),
    FILTER (
        ALL ( 'Dates'[CalendarDate] ),
        'Dates'[CalendarDate] <= MAX (Dates[CalendarDate] )
    )
)

然而,我的公式并非旨在仅让专业人员获得最近的办公室。但是总计是正确的。

下面是我们努力看到但无法获得的输出。

使用几个月的累计总计的期望输出:

Month | CHI | LAX | STL
-----------------------
Jan   | 0   | 0   | 1 
Feb   | 0   | 0   | 2   
Mar   | 0   | 1   | 1
Apr   | 0   | 1   | 1
May   | 0   | 1   | 1
Jun   | 0   | 1   | 2
Jul   | 0   | 1   | 2
Aug   | 0   | 1   | 2
Sep   | 1   | 0   | 2
Oct   | 1   | 0   | 2
Nov   | 1   | 0   | 2
Dec   | 1   | 0   | 2

您可以通过为所有新办公室离职添加另一个累计总数来完成此操作。然后从您已经计算的所有办公室入职者的累计总数中减去这个新的累计总数。

首先创建一个新的计算列 DepartureDate 来记录此人离开办公室的日期。对于从未转移过的人可以将其保留为今天的日期,即您日期中的最后日期 table:

=
IF (
    ISBLANK (
        CALCULATE (
            MIN ( TransactionTable[Effectivedate] ),
            FILTER (
                TransactionTable,
                TransactionTable[Name] = EARLIER ( TransactionTable[Name] )
                    && TransactionTable[EffectiveDate] > EARLIER ( TransactionTable[EffectiveDate] )
    ))),
    MAX ( 'Dates'[CalendarDate] ),
    CALCULATE (
        MIN ( TransactionTable[Effectivedate] ),
        FILTER (
            TransactionTable,
            TransactionTable[Name] = EARLIER ( TransactionTable[Name] )
                && TransactionTable[EffectiveDate] > EARLIER ( TransactionTable[EffectiveDate] ))))

然后在此计算列和您的日期 CalendarDate 字段之间创建关系。这将是一种不活跃的关系,因为您已经创建了一个活跃的关系。

现在调用非活动关系为您的离开累积总数创建一个度量:

   DeparturesCumulativeTotal =
    CALCULATE (
        COUNTROWS ( TransactionTable ),
        USERELATIONSHIP ( TransactionTable[DepartureDate], 'Dates'[CalendarDate] ),
        FILTER (
            ALL ( 'Dates' ),
            'Dates'[CalendarDate] < MAX ( 'Dates'[CalendarDate] )
        )
    )

通过对 MAX Dates 子句使用“<”而不是“<=”,我们确保我们不会将今天约会的人视为今天离开的人。

最后,创建另一个新度量以从现有度量中减去新的累计总数:

Net:=[Cumulative DistinctCount]-[DeparturesCumulativeTotal]

这是它的样子:

您好,感谢您的 post 巨大工作,

请将 max 更改为最早,将 distinctcount 更改为 CountCounta(取决于数据类型):

Cumulative DistinctCount:=CALCULATE (
    Counta(TransactionTable[Name]),
    FILTER (
        ALL ( 'Dates'[CalendarDate] ),
        'Dates'[CalendarDate] <= Earliest (Dates[CalendarDate] )
    )
)