博客:www.jiaopengzi.com

焦棚子的文章目录
请点击下载附件

1、背景

在论坛中看到朋友在提复购率(重复购买率)等相关问题,今天把结果贴出来。

问题原贴:计算订单中的老顾客复购率

感谢问题原贴主提供脱敏素材文件。

贴一个效果图看看先;

说明:

1、复购率定义:按天去重,即一个客户一天产生多笔交易付款,则算一次购买,除非在统计周期内另外一天也有购买,则算重复购买。

2、结果中,RF和RF%中,列明细汇总大于等于总计,因为有的客户在不同的上下文中都出现了,所以会多次计算。

二、数据源:

1、data

2、参数维度表

3、calendar(日期表)

4、sku

由于数据处理过,sku变成了分类吧,实际应该是sku。

5、客户

客户维度表,在对客户维度如ABC中会用的更多,本案例中其实可以不用。有用到一个点,但数据大的话,还是需要的。

6、建立关系

7、结果图

三、上DAX

1、客户总数

客户总数:=DISTINCTCOUNT(data[客户ID])

2、复购客户

复购客户:=
VAR T1 =FILTER (ADDCOLUMNS ( '客户', "RQ", CALCULATE ( DISTINCTCOUNT ( DATA[下单日期] ) ) ),[RQ] > 1)
RETURNCALCULATE ( 'DATA'[客户总数], T1 )

3、复购率

复购率:=DIVIDE('data'[复购客户],'data'[客户总数])

4、近3个月复购率

近3个月复购率:=
VAR D1 =STARTOFMONTH ( 'CALENDAR'[DATE] )
VAR D2 =DATEADD ( D1, -2, MONTH )
VAR D3 =ENDOFMONTH ( 'CALENDAR'[DATE] )
VAR T1 =DATESBETWEEN ( 'CALENDAR'[DATE], D2, D3 )
VAR TF =IF (CALCULATE ( MAX ( 'DATA'[下单日期] ), ALL ( 'CALENDAR' ) ) >= D3,TRUE (),FALSE ())
RETURNIF ( TF, CALCULATE ( 'DATA'[复购率], T1 ), BLANK () )

5、近12个月复购率

近12个月复购率:=
VAR D1 =STARTOFMONTH ( 'CALENDAR'[DATE] )
VAR D2 =DATEADD ( D1, -11, MONTH )
VAR D3 =ENDOFMONTH ( 'CALENDAR'[DATE] )
VAR T1 =DATESBETWEEN ( 'CALENDAR'[DATE], D2, D3 )
VAR TF =IF (CALCULATE ( MAX ( 'DATA'[下单日期] ), ALL ( 'CALENDAR' ) ) >= D3,TRUE (),FALSE ())
RETURNIF ( TF, CALCULATE ( 'DATA'[复购率], T1 ), BLANK () )

6、最近12月间隔购物天数

最近12月间隔购物天数:=
VAR D1 =STARTOFMONTH ( 'CALENDAR'[DATE] )
VAR D2 =DATEADD ( D1, -11, MONTH )
VAR D3 =ENDOFMONTH ( 'CALENDAR'[DATE] )
VAR T1 =DATESBETWEEN ( 'CALENDAR'[DATE], D2, D3 )
VAR T2 =CALCULATETABLE ( VALUES ( DATA[客户ID] ), T1 )
VAR T3 =FILTER (ADDCOLUMNS (T2,"COUNT", CALCULATE ( DISTINCTCOUNT ( DATA[下单日期] ), ALL ( 'CALENDAR'[YM] ) ),"DAY", DATEDIFF (CALCULATE ( MIN ( DATA[下单日期] ), ALL ( 'CALENDAR'[YM] ) ),CALCULATE ( MAX ( DATA[下单日期] ), ALL ( 'CALENDAR'[YM] ) ),DAY)),[DAY] > 0)
VAR C =CALCULATE ( 'DATA'[客户总数], T3, ALL ( 'CALENDAR'[YM] ) )
VAR TF =IF (CALCULATE ( MAX ( 'DATA'[下单日期] ), ALL ( 'CALENDAR' ) ) >= D3,TRUE (),FALSE ())
RETURNIF ( TF, DIVIDE ( SUMX ( T3, DIVIDE ( [DAY], [COUNT] ) ), C ), BLANK () )

7、RF%

RF是recency和frequency的缩写,即最近购买时间和购买次数,RF%符合要求的客户数占比总客户数的百分比。

RF%:=
VAR N1=SUM('RECENCY'[RL])
VAR N2=SUM('RECENCY'[RR])
VAR D=MAX('DATA'[下单日期])
VAR D1=DATESINPERIOD('CALENDAR'[DATE],D,-N1,DAY)
VAR D2=DATESINPERIOD('CALENDAR'[DATE],D,-N2,DAY)
VAR T1=EXCEPT(D2,D1)
VAR I=SUM(FREQUENCY[ID])
VAR TF1=IF(ISFILTERED(RECENCY[RECENCY]),TRUE(),FALSE())
VAR TF2=IF(ISFILTERED(FREQUENCY[FREQUENCY]),TRUE(),FALSE())
VAR C=
SWITCH(TRUE(),
TF1&&TF2,
SWITCH(TRUE(),I=1,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=1),T1),I=2,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=2),T1),I=3,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=3),T1),I=4,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=4),T1),I>=5,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]>=5),T1)),
TF1=FALSE()&&TF2=TRUE(),
SWITCH(TRUE(),I=1,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=1)),I=2,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=2)),I=3,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=3)),I=4,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=4)),I>=5,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]>=5))),
TF1=TRUE()&&TF2=FALSE(),CALCULATE('DATA'[客户总数],T1),
TF1=FALSE()&&TF2=FALSE(),'DATA'[客户总数])RETURN
DIVIDE(C,‘DATA’[客户总数])

8、RF

RF是recency和frequency的缩写,即最近购买时间和购买次数,RF符合要求的客户数。

RF:=
VAR N1=SUM('RECENCY'[RL])
VAR N2=SUM('RECENCY'[RR])
VAR D=MAX('DATA'[下单日期])
VAR D1=DATESINPERIOD('CALENDAR'[DATE],D,-N1,DAY)
VAR D2=DATESINPERIOD('CALENDAR'[DATE],D,-N2,DAY)
VAR T1=EXCEPT(D2,D1)
VAR I=SUM(FREQUENCY[ID])
VAR TF1=IF(ISFILTERED(RECENCY[RECENCY]),TRUE(),FALSE())
VAR TF2=IF(ISFILTERED(FREQUENCY[FREQUENCY]),TRUE(),FALSE())
RETURN
SWITCH(TRUE(),
TF1&&TF2,
SWITCH(TRUE(),I=1,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=1),T1),I=2,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=2),T1),I=3,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=3),T1),I=4,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=4),T1),I>=5,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]>=5),T1)),
TF1=FALSE()&&TF2=TRUE(),
SWITCH(TRUE(),I=1,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=1)),I=2,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=2)),I=3,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=3)),I=4,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]=4)),I>=5,CALCULATE('DATA'[客户总数],FILTER(ADDCOLUMNS('客户',"RQ",CALCULATE(DISTINCTCOUNT(DATA[下单日期]))),[RQ]>=5))),
TF1=TRUE()&&TF2=FALSE(),CALCULATE('DATA'[客户总数],T1),
TF1=FALSE()&&TF2=FALSE(),'DATA'[客户总数])

四、总结

1、业务为导向,理解业务,把业务转换成dax上下文;

2、参数表的使用;

3、按天去重的复购率的定义,所在在模型中增加了去掉购买时间的购买日期;

4、参考模型RFM模型,做一个 RF矩阵;

5、附件中放了一个《购买次数5次及以上验证》的sheet,便于验证。

by焦棚子

焦棚子的文章目录

113_Power Pivot 销售订单之重复购买率及购买间隔天数相关相关推荐

  1. 112_Power Pivot 销售订单按 sku 订单类型特殊分类及占比相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 经过了一个双十一后,天天面对的都是订单.于是有了关于销售订单按sku类型分类的需求. 说明:(暂且不讨论这样分类 ...

  2. 114_Power Pivot 销售订单之销售额、成本、利润率相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 双十二回来后遇到一个比较有意思的计算销售额和利润率的需求(见下文说明). 先看下效果. 结果 说明: 1.订单表 ...

  3. SD销售订单输入成本中心

    销售订单在某些情况下需与成本中心相关,比如礼品.促销等视同销售的行为,需记帐到费用中,这时候需要一个成本中心作为成本对象.在SD中可按销售范围+订单原因配置对应的成本中心,对于不能按此方式推导成本中心 ...

  4. SAP 销售订单中的成本中心

    销售订单在某些情况下需与成本中心相关,比如礼品.促销等视同销售的行为,需记帐到费用中,这时候需要一个成本中心作为成本对象.在SD中可按销售范围+订单原因配置对应的成本中心,对于不能按此方式推导成本中心 ...

  5. 销售订单_跨公司销售

    销售订单_跨公司销售 by 枫竹丹青 ⋅ Leave a Comment 一.说明 在由多个公司组成的企业集团中,通常会有一种跨公司销售业务,A公司与客户洽谈,在ERP系统中创建销售订单,但货物由B公 ...

  6. SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE

    SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE 简介: SAP ABAP 业务对象 BUS6021 AcctngSales ...

  7. SAP SD微观研究之销售订单类型配置里有关PO的几个字段

    SAP SD微观研究之销售订单类型配置里有关PO的几个字段 在销售订单单据类型的配置(VOV8)里,有几个字段是与采购订单有关的.如下图示: 对于这几个字段的控制作用,值得去研究一下.笔者参考网上相关 ...

  8. Python销售订单分析。

    我们常讲数据分析的三大作用:现状分析.原因分析.预测分析,现状分析可以表明当前的业务状况,对当前的业务状况做分析,可以给决策者提供一个数据支撑和参考. 本节使用一组销售订单明细数据,研究不同产品的订单 ...

  9. 用mysql建销售订单主表_mysql订单表如何设计?

    mysql订单表如何设计? 商品表和订单表 . 通过一个表来关联. 那删除了商品,相关联的订单表如何显示出这个已经删除的商品? 订单表需要冗余商品名.商品编号.价格等基本信息. 不能只保存一个商品主键 ...

最新文章

  1. 带收缩因子的PSO优化算法
  2. 通讯编码器测试软件,西门子S7-200 SMART通过modbusRTU与绝对值编码器通信
  3. 三维重建1-位姿追踪:单应矩阵、本质矩阵和基本矩阵
  4. reids 源码 zipmap.c 压缩map的实现
  5. javafx 示例_JavaFX列表示例
  6. JBox2D和JavaFX:事件与力量
  7. 让cocos2dx支持并通过arm64 编译
  8. [Linux] vimdiff 快速比较和合并少量文件
  9. Unity Android汉化
  10. CMMI认证过程中实施步骤详解
  11. visual studio code输出中文乱码问题的解决方案
  12. Hive的行列转换(行转多列、多列转行、行转单列、单列转行)
  13. 突破限制轻松下载网盘的文件,免登陆使用,速度也不错!
  14. 使用int存储ip地址
  15. 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
  16. 图片工具GraphicsMagick的下载安装配置使用
  17. snmpwalk的报文检测
  18. 浙江大学软件学院人工智能保研面经2021
  19. 4.2 长训练序列的生成
  20. 爬取热榜2k图片,爬虫入门即可

热门文章

  1. private关键字 java 1613808402
  2. java演练 类与对象 给我一个数字还你一个字符串
  3. django-url映射给函数给默认值
  4. python-模块-pymysql操作数据库
  5. javascript-各种取值的操作-样式操作
  6. python_day12_html
  7. 我的react组件化开发道路(二) 分页 组件开发
  8. windows写文件到ubuntu之samba
  9. Wordpress表结构详细说明
  10. 适合初学者的struts简单案例