在powerpivot中计算每月新身份证号码的数量

Calculating the number of new ID numbers per month in 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

客户可以开设或关闭他们的账户,我想计算每月'new'个客户的数量。如果可能的话,'exited' 客户的数量也会有所帮助。

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

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

基本上我想比较所选月份和上个月的不同帐号,任何存在于所选月份而不是之前的都是新成员,任何上个月存在但不在所选月份的都是退出。

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

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

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

获得取消的用户有点困难,因为这意味着您必须能够回顾上个月 - none PowerPivot 中的时间智能内容将在这里开箱即用没有真正的日期列。

在您的 PowerPivot 模型中有一个单独的日期 table 几乎总是好的做法,这是解决这个问题的好方法 - 本质上 table 应该是每个日期 1 条记录可用于创建关系的唯一键。也许 post 回来提供更多细节。

这是 Jacobs 的替代方法,同样有效。它避免创建计算列,但实际上我发现计算列可用作针对其他度量的标志。

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

它基本上使用日期 table 对从时间开始到所选时间段的第一天的所有 Acc_ID 进行不同计数,并从不同计数中减去它从时间开始到所选时间段的最后一天的所有 Acc_ID。这实际上是新的不同 Acc_ID 的数量,尽管您无法计算出哪些 Acc_ID 正在使用此方法。

然后我可以通过将前几个月的总数计算为 'existing accounts':

来计算 'exited accounts'
=CALCULATE(
    DISTINCTCOUNT('Accounts'[Acc_ID]), 
    DATEADD('Dates'[Date], -1, MONTH)
)

然后加上'new accounts',减去'total accounts':

=DISTINCTCOUNT('Accounts'[Acc_ID])