Power Pivot中如何通过交叉表计算新老客户?

新客户和回头客计算

相关表

关系图

(一) 概念定义

  • 新客户:在发生交易时,之前未有过交易。
  • 回头客:在发生交易时,之前有过交易。

(二) 添加列辅助写法

我们可以直接在数据表中直接添加辅助列进行计算。

1. 通过添加列区分新老客户
代码语言:javascript
复制
If(Countrows(Filter('数据表','数据表'[客户]=Earlier('数据表'[客户]) &&
                    '数据表'[时间]<Earlier('数据表'[时间])))=Blank(),
   "新客户",
   "老客户")
2. 通过度量计算新老客户数
代码语言:javascript
复制
新客户数:=Calculate(DistinctCount('数据表'[客户]),'数据表'[新老客户]="新客户")
老客户数:=Calculate(DistinctCount('数据表'[客户]),'数据表'[新老客户]="老客户")

注意:这里的老客户数,只能在维度筛选中无重复的情况下才能使用。例如同一个月既是新客户,又是老客户,这个度量的老客户数就会出现多计算的现象。

所以我们可以使用总客户数-新客户数来表示老客户数。

代码语言:javascript
复制
总客户数:=DistinctCount('数据表'[客户])
老客户数_减法:=[总客户数]-[新客户数]

(三) 交叉表直接通过度量书写

我们知道之前的有分享过共享多端的1端如何进行筛选计算,这我们也可以用这种方式来计算新老客户。

1. 计算购买客户数
代码语言:javascript
复制
购买客户数:= Calculate(CountRows(Filter('客户表',
                                       Calculate(CountRows('数据表')>0))
                                      )
                     )
2. 计算未购买客户数

只需要把参数改为=0即可计算未购买的客户数。

代码语言:javascript
复制
未购买客户数:= Calculate(CountRows(Filter('客户表',
                                         Calculate(CountRows('数据表')=0))
                                 )
                       )
3. 计算之前未购买的客户数

增加一个时间条件,可以计算出之前未购买的客户数。

代码语言:javascript
复制
之前未购买客户数:=Calculate(CountRows('客户表'),
                         Filter('客户表',
                                Calculate(Countrows('数据表'),
                                          Filter(All('数据表'[时间]),'数据表'[时间]<Min('数据表'[时间]))
                                          )=0
                                )
                          )
4. 计算当期新客户数

把2个条件合并,本次购买了,之前未购买的客户作为新客户数。

代码语言:javascript
复制
当期新客户数:=Calculate(CountRows('客户表'),
                      Filter('客户表',
                             Calculate(CountRows('数据表'))>0  &&//当期成交客户
                             Calculate(Countrows('数据表'),    //之前未成交的客户
                      //在进行时间比较的同时,把时间筛选相关的维度都忽略
                                       Filter(All('数据表'[时间]),
                                                  '数据表'[时间]<Min('数据表'[时间])
                                              )
                                       )=0
                            )
                      )
5. 计算当期新客户数简化写法

当然我们还可以进行一下简化

代码语言:javascript
复制
当期新客户数_简化:=Calculate(CountRows('客户表'),
                          Filter('客户表',
                                 [购买客户数] && [之前未购买客户数]
                                )
                          )

通过2个之前计算出的度量值去筛选又是购买客户,又是之前未购买的客户就是我们的新客户,然后进行计算。

6. 计算老客户数

当然后面的老客户我们也是可以通过减法来进行计算。最终效果

我们可以注意下,如果把7月按月份显示,减法和直接算的差异就体现出来了,包括总计这里也是。

如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。