计算powerpivot中每月新ID号的数量

时间:2016-10-18 02:09:38

标签: powerpivot

我的数据集提供客户帐户的每月快照。以下是一个非常简化的版本:

Date_ID | Acc_ID
------- | -------
20160430| 1
20160430| 2
20160430| 3
20160531| 1
20160531| 2
20160531| 3
20160531| 4
20160531| 5
20160531| 6
20160531| 7
20160630| 4
20160630| 5
20160630| 6
20160630| 7
20160630| 8

客户可以打开或关闭他们的帐户,我想计算新的'客户每个月。退出的号码数量为'如果可能的话,客户也会有所帮助。

所以在上面的例子中,我应该得到以下结果:

Month   | New Customers
------- | -------
20160430| 3
20160531| 4
20160630| 1

基本上我想比较选定月份和上个月的不同帐号,所选月份中存在的任何帐号都不是新成员,上个月出现的任何帐号都不会被退出。

我已经搜索过,但我似乎无法找到任何类似的问题,而且我几乎不知道从哪里开始 - 我已尝试使用CALCULATE和FILTER以及DATEADD过滤数据到得到两个月,然后计算唯一值。我的PowerPivot技能并不是为了解决这个问题,而是我自己解决这个问题!

2 个答案:

答案 0 :(得分:0)

获取新用户相对简单 - 我会添加一个计算列,该列计算该用户在前几个月的行数,如果它们不存在,那么他们就是新用户:

=IF(CALCULATE(COUNTROWS(data), 
              FILTER(data, [Acc_ID] = EARLIER([Acc_ID]) 
                           && [Date_ID] < EARLIER([Date_ID]))) = BLANK(), 
    "new", 
    "existing")

一旦到位,您只需为new_users编写一个度量:

=CALCULATE(COUNTROWS(data), data[customer_type] = "new")

获取被取消的用户有点困难,因为这意味着你必须能够回顾上个月 - PowerPivot中的情报部件无法在这里开箱即用,因为你没有真正的日期栏。

在PowerPivot模型中有一个单独的日期表几乎总是好的做法,这是解决这个问题的好方法 - 基本上每个日期的表应该是1条记录,其中一个唯一的密钥可用于创建关系。或许可以回复一些细节。

答案 1 :(得分:0)

这是雅各布的另一种方法,也适用。它避免了创建计算列,但实际上我发现计算列可用作反对其他度量的标志。

=CALCULATE(
    DISTINCTCOUNT('Accounts'[Acc_ID]), 
    DATESBETWEEN(
        'Dates'[Date], 0, LASTDATE('Dates'[Date])
    )
) - CALCULATE(
    DISTINCTCOUNT('Accounts'[Acc_ID]), 
    DATESBETWEEN(
        'Dates'[Date], 0, FIRSTDATE('Dates'[Date]) - 1
    )
)

它基本上使用日期表来计算从开始时间到所选时间段的第一天的所有Acc_ID的不同计数,并从开始时间到所有Acc_ID的非重复计数中减去该数量。选定时间段的最后一天。这基本上是新的不同Acc_ID的数量,尽管您无法确定哪些Acc_ID使用此方法。

然后,我可以将前几个月的总数作为“现有帐户”来计算“退出帐户”:

=CALCULATE(
    DISTINCTCOUNT('Accounts'[Acc_ID]), 
    DATEADD('Dates'[Date], -1, MONTH)
)

然后添加“新帐户”,并减去“总帐户”:

=DISTINCTCOUNT('Accounts'[Acc_ID])