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

是否有可能根据PowerPivot表中使用DAX的字段的最近值得到不同的行数?

我有一个交易表,跟踪专业人员与租用和转移date。 我想根据他们最近的办公室来计算专业人员。 通过组织的专业转移,我们可以看到他们在某个特定时刻的位置。

交易表:

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 

我创build了一个使用DISTINCTCOUNT函数的度量。 有了这个,我可以得到正确的总和,但个人办公室总数不是我想要的。 我明白我的公式正在做我所要求的。 但是,我不知道如何才能使它返回一个基于最近生效date的专业人员办公室

 DistinctCount:=DISTINCTCOUNT(TransactionTable[Name]) 

这是使用我创build的DistinctCount度量的输出 在这里输入图像描述

我假设我将不得不使用CALCULATE函数,并应用一个FILTER函数来获得最近的办公室的独特专业人员,但我不知道如何看。

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

此外,我们希望这个数据分几个月或者几个季度。 这可以让我们看到每个办公室的累计数量 。 我们有一个定义月份,季度和年份的date表。

date表:

 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 

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

首先创build一个新的计算列DepartureDate以logging该人离开办公室的date。 对于从未转移过的人,可以将其保留为今天的date,即date表中的最后一个date:

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

然后在这个计算的列和您的date日历date字段之间创build一个关系。 这将是一个不活跃的关系,因为你已经有一个积极的关系创build。

现在创build一个衡量你的出发累计总数调用非活跃的关系:

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

通过在MAXdate条款中使用“ < ”而不是“ <= ”,我们确保我们不会将今天date的人看作是今天出发的人。

最后,创build另一个新的方法,从现有的累计总数中减去:

 Net:=[Cumulative DistinctCount]-[DeparturesCumulativeTotal] 

这是它的样子:

在这里输入图像说明

嗨谢谢你这个post的巨大工作,

请尽早更改max ,并将CountaCounta (取决于数据types):

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