Tableau计算回流客户:参数筛选 vs 表关联,哪个更高效?

最近社群里有同学询问客户回流分析,如何在 Tableau 中完成。抛出了下面这张表。啥是客户回流简单说——之前买过,然后“消失”了(这里按“连续90天没下单”算),结果当月又跑来买了,这类客户就是“回…

最近社群里有同学询问客户回流分析,如何在 Tableau 中完成。抛出了下面这张表。

啥是客户回流简单说——之前买过,然后“消失”了(这里按“连续90天没下单”算),结果当月又跑来买了,这类客户就是“回流客户”。

核心逻辑就两个:“曾经流失”+“当月复购”。作用如下:

● 看运营效果:搞了老客召回活动,回流客户变多,说明活动没白搞;

● 估用户粘性:回流多,证明客户对品牌有念想,不是买一次就跑;

● 算投入产出:回流客户的获客成本比新客低,盯着这个指标能省不少钱。

这里的计算并不是很难,我提供2种方案——基础版适合临时查单月,进阶版本可以一次性计算出全年指标。

方案1:基础版——单表+参数,快速查某一个月

(适合刚上手、就想知道“这个月回流多少人”的同学)

思路很简单:使用Tableau 自带的订单表,先指定要查的月份,再给客户打标签、计算最后两次下单,算两次下单的间隔判断回流客户。

首先,建个“目标月份”的参数,选日期类型、年月格式。

然后,写几个计算字段(以下均为Tableau计算字段语法,直接复制替换字段名即可用):

● 0.订单日期筛选:

DATETRUNC("month",[订单日期])<=[订单日期 (月) 参数]
{ FIXED [客户名称]:max(IF DATETRUNC("month",[订单日期])=DATETRUNC("month",[订单日期 (月) 参数]) then "本月购买客户" END)}
{ FIXED [客户名称]:MAX([订单日期])}

● 3.本月客户倒数第二次购买:

{ FIXED [客户名称]:MAX(IF [订单日期]<>[2.本月客户的最近一次购买] then [订单日期] END)}

● 4.流失客户标签:

IF DATEDIFF("day",[3.本月客户的倒数第二次购买],[2.本月客户的最近一次购买])>=90 then "流失客户回归" ELSE "非流失客户"END

最后,按照下图的操作,就可以计算出单月的回流客户。

方案2:迭代版——加个表,一键出全年趋势

基础版查单月还行,要是想看今年每个月的回流数据,就比较麻烦了。BI软件都没有循环功能,所以要实现循环迭代的效果,需要增加一张日期辅助表,和订单表关联起来。

● 日期辅助表:就一列“统计月份”,把要分析的年月都列上。

● 原始订单表与日期表做关联:

关联条件DATE(DATETRUNC("month",[订单日期]))<=日期月份(辅助表)的核心作用,就是给每个 “统计月份” 绑定它及之前所有月份的订单数据,模拟编程里的“迭代计算”:举个例子:

当辅助表取 “2024-10-01” 这个统计月时,关联条件会筛选出所有订单月份≤2024-10 的订单(也就是 2024 年 1-10 月的所有订单,如果有更早的订单也可以包含进来);

当辅助表取 “2024-11-01” 时,又会筛选出2024年 1-11 月的所有订单;

以此类推,每个统计月都会 “带上自己之前所有的历史订单”。

为什么要这么做?BI 软件一般来说都没有 “按月份循环迭代计算” 的功能,咱们没法直接让系统 “逐个月份算回流客户”。而通过这个关联逻辑,相当于给每个统计月都打造了一份 “专属数据池”—— 每个月份都能基于自己的 “全量历史数据” 算回流,不用手动切换参数,最终就能一次性算出所有月份的回流客户数据,实现 “批量迭代” 的效果。

● 1.当月客户打标签:

{ FIXED [日期月份 (辅助表)],[客户名称]:max(IF DATETRUNC("month",[订单日期])=[日期月份 (辅助表)] then "当月购买客户" END)}

● 2.当月最后一次购买日期:

{ FIXED [日期月份 (辅助表)],[客户名称]:MAX([订单日期])}
{ FIXED [日期月份 (辅助表)],[客户名称]:MAX(IF [订单日期]<[2.当月最后一次购买日期] then [订单日期] END)}
IF DATEDIFF("day",[3.当月倒数第二次购买日期],[2.当月最后一次购买日期]) >=90 then "流失客户回归" ELSE "非流失客户"END

完整版下载地址:https://public.tableau.com/app/profile/jiangbin/viz/_17509836412800/1

四、两种方案对比

PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
📖 相关文章
基于RFM模型与Tableau Prep NTILE函数的旅客价值分层实现
中小企业 BI最佳实践:阿里/腾讯云服务器+Tableau DW/BI 一体化方案
 【致知篇44】逻辑世界:数据、佛法与体系
使用Tableau参数操作传递多个值
生产排产智能调度(1):构建更“人性”的生产调度模型
——————————————————————————————

No comments yet