在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])
我的数据集提供客户帐户的月度快照。下面是一个非常简化的版本:
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])