3

是否可以使用DAX根据PowerPivot表中字段的最新值获取不同的行数?

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

交易表:

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函数的度量。有了这个,我就能得到正确的总计,但个别办公室的总计不是我想要的。我知道我下面的公式正在做我所要求的。但是,我不确定如何使其仅根据最近的生效日期返回专业办公室

DistinctCount:=DISTINCTCOUNT(TransactionTable[Name])

这是使用我创建 的DistinctCount度量的输出在此处输入图像描述

我假设我将不得不使用CALCULATE函数并应用FILTER函数来获取不同专业人士最近的办公室,但我不确定它会是什么样子。

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

此外,我们希望这些数据按月份或季度进行时间分段。这将使我们能够看到每个办公室随时间的累积计数。我们有一个定义月份、季度和年份的日期表。

日期表:

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
4

2 回答 2

3

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

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

=
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] ))))

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

现在为您的出发累计总数创建一个度量,调用非活动关系:

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

通过在 MAX Dates 子句中使用“ <”而不是“ <=”,我们确保我们不会将具有今天日期的人视为今天离开的人。

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

Net:=[Cumulative DistinctCount]-[DeparturesCumulativeTotal]

这是它的样子:

在此处输入图像描述

于 2015-05-10T12:31:15.197 回答
-1

嗨,感谢您为这篇文章所做的出色工作,

请务必更改为max最早,或(取决于数据类型):distinctcountCountCounta

Cumulative DistinctCount:=CALCULATE (
    Counta(TransactionTable[Name]),
    FILTER (
        ALL ( 'Dates'[CalendarDate] ),
        'Dates'[CalendarDate] <= Earliest (Dates[CalendarDate] )
    )
) 
于 2017-02-17T14:32:07.283 回答