作为Tableau学习路上最大的拦路虎之一,LOD如此强大,但又如此变化莫测,需要反复的练习和琢磨才行。在LOD的第三篇中,我们详细介绍了分析LOD类型命题的思路,即可视化焦点+引用背景的分解方法(【Tableau】详细级别表达式LOD_(3))。这篇博客,我们将详细地介绍官方的15大详细级别表达式de会员分析部分,并用上面的思路做进一步的分解,有助于初学者更好地理解这些案例。

下面的链接,可以看到LOD15大详细级别表达式的中英文版原文。

「可视化焦点+引用背景」的分解方法,其本意就是让我们把解决问题分为台前和幕后两个阶段,台前的部分是数据冰上的可视化部分,而幕后的部分则是使用LOD引用可视化级别中没有的聚合。这就是官方博客中第二段的首句的意思。

“LOD表达式提供了一种简单的方法,用以计算不在可视化详细级别层面的数据聚合。你因此可以在视图中以多种方式整合这些数据。”

在前一篇文章中,我们花了极大的篇幅介绍了官方的15个LOD案例,几乎涵盖了常见的各种用法。在本篇中,我想只针对【会员分析】这一个主题,根据主题分析的方法,介绍如何将Tableau 的LOD分析工具,应用到真实的业务环境中去。

之后我的很多分析,都会沿着【行业】+【主题】的案例分享展开,这是受我的客户、我的曾经同事的指引。

在15大LOD中,和会员紧密相关的是案例1 客户订单频率分析,案例2 客户阵列分析,案例5 新客户争取率(获客率)分析,案例10,各阵列的回头客分析,案例15,各客户阵列的年度购买频率分析。

为什么会员分析如此高频又如何重要?一方面,只要有会员标识的数据,相对都更加完整,我们有两个唯一的标识(用户唯一标识和订单唯一标识),可以增加分析的维度,另一方面,对顾客和会员的分析,是可以立刻反映公司经营质量的重要指标。

(前面的案例分析和第一篇一致,近期会二次修改,如果看过上篇的,可以直接看最后一个案例——大结局和大升华)

 

1、客户订单频率 Customer order frequency

在零售分析中,我们经常会遇到“顾客购买频次”分析,通过查看顾客购买次数的数量和分布,来分析顾客的复购黏性,

命题:客户的购买频率分布,即购买过一次、两次、三次……的顾客分别多少。

  • 可视化焦点:不同购买次数下的顾客数量。
    • 可视化维度:购买频次(1,2,3,N)
  • 需要引用的背景信息:每个顾客的购买次数
    • fixed [customer ID] : countd(order)

在视图中,我们仅使用两个维度——购买频次和顾客的计数,也就是两个都是数值。用官方的方式说,这是用一个数值去区分另一个数值(breaking out a measure by another measure ),LOD fixed可以轻松地把一个度量转化为维度,这是include和exclude不能做的。

1 顾客购买品牌.png

//要点:Fixed LOD的独特之处是返回的多个数据结果可以作为维度使用。相比之下,include和exclude都只能作为度量使用。

 

2、阵列分析 cohort  analysis

这个命题希望看到每个年度的新增客户在当年的销售贡献。我们把顾客获得的年度,简单称之为顾客新增,或者叫新增年度。从视图的角度看,视图的关注焦点是什么?每年中不同顾客阵列的贡献金额。因此,可视化中的维度是年、销售额sum和顾客标签(新增年度)。

在视图中我们缺少什么信息,需要我们从背景信息中引用呢?我们缺少每个顾客的标签(新增年度),因为视图不是顾客详细级别的,这就需要LOD来实现不在视图详细级别的维度的聚合。(LOD provide a way to easily compute aggregations that are not in the level of the visulization.)

首先我们按照客户首次购买的年份将客户分组,虽然这个LOD fixed返回的是首次购买的完整日期,但是我们使用它的年度部分,因此把所有客户按照年度分为几组,比如2010、2011、2012……

1st order date =  {Fixed [customer ID]: MIN([order date])

为了对比各个阵列的年度销售贡献额,我们把order year拖入列,profit加入行,生成一个可视化图之后,再引用背景信息(首次购买日期)到颜色中,形成不同年度客户的贡献金额。注意,这个视图的详细级别是顾客,因此一个顾客只会对应一个最早购买日期。

Screen Shot 2018-11-26 at 09.43.39.png

接下来的工作,就是通过表计算实现阵列的百分比分析了。

//要点:一方面使用了fixed LOD作为维度使用的功能,另一方面通过把LOD字段加入到颜色标记,进一步增加了数据的表现深度。

 

5. 新客户争取率 New customer acquisition

命题:what is the toal number of customers we’ve acquired per market by day?

这个命题的可视化焦点是每个市场每天的新客户获得数量,因此需要把三个维度或度量加入到视图:日期(天)、市场、新顾客数量。 注意,这个题目的数据,应该是订单级别的,而不是商品级别的。

而新顾客数量,就是我们需要使用LOD额外引用的背景信息。

要特别注意的是,这个题目和前面第二题不同,前面我们通过 {fixed customer: MIN(order date) }返回每个客户的最早订单日期,因为第二题的详细级别是顾客,因此顾客和最早购买日期是一一对应的。但是这个命题中,查看客户争取数量,是以日期为详细级别的,一个顾客的订单可以分布在多个日期之中,因此就需要对应不同的标签。这是这个命题的关键。

因此,额外的背景信息就是,每个顾客在每个消费日期下对应的标签,是新客户,还是老客户?判断新老客户,又需要与首次购买日期做对比,因此首先会用到Fixed LOD:

1st order date =  {Fixed [customer ID]: MIN([order date])

上面的LOD表达式是在顾客详细级别上的计算,接下来我们需要在行级别做每个订单的判断,因此使用if函数。将每一次的订单时间和首次购买时间做匹配,给每个订单打标签

IFF( [1st order date]=[order date], ‘new’,’existing’ )

在准备好了背景数据之后,我们就可以构建视图了,这里把上面的new/existing加入了筛选器,仅保留了新客户的数据,也就是只有每天新客户的首次订单。既然一个新客户只对应一个订单,就可以通过通过计算顾客的数量,加上running total,生成新客户的数量。

Screen Shot 2018-11-26 at 12.12.05.png

//要点:在上一个的用例基础上,这个增加了if判断、筛选器和表计算。而Fixed LOD只有一个。这个的难点在于理解命题的整个逻辑。

 

10.各个阵列的回头客

After customers are acuqired, how many quarters elapse before they make another purchase?

在零售分析中,会员分析的RFM模型会被广泛引用,RFM分别代表会员最近一次消费(Recency)、消费频率(Frequency)、消费金额(Monetary),三者构成了衡量客户价值的重要指标。通过分析最近一次消费的时间可以判断会员状态(流失?沉睡?存活?),通过分析消费频次可以判断顾客的忠诚度,而通过分析消费金额,则可以推算顾客的贡献度(高价值顾客、低价值顾客等)。

在这个题目中,我们要分析顾客两次消费的间隔,因此我们需要给每位顾客分别打两个标签:最近一次消费时间、最近第二次消费时间。

我们在视图中构建矩阵,横轴和纵轴分别会是日期和日期间隔,数据为两次消费时间的间隔;视图中没有顾客的维度,但是又是以顾客为详细级别的。为了解决“视图中没有的维度但又要引用这个级别的数据计算”,我们需要使用fixed返回顾客的消费日期。

  • 可视化的焦点:下单日期和购买频次间隔,顾客详细级别。
  • 需要引用的背景信息:每个顾客在两次购买中间的间隔,顾客的订单详细级别。

这个题目的关键是,我们需要使用两次Fixed函数,返回两个日期,第二个日期建立在第一个日期的计算基础上。

首次消费日期:如果我们把每个顾客的所有消费日期看作一个整体,我们可以理解为一个数组;首次消费日期,就是从每个数组中找到其中的最小值。我们使用fixed指定每个顾客返回这个结果,因此公式如下:

1st purchase date = {Fixed [Customer ID] : MIN([Order Date])}

Fixed LOD是直接在数据源层面计算的,返回的结果是行级别的,因此每个顾客的每一条记录都对应了一个1st purchase date字段。

接下来,我们需要返回第二次购买时间,如何返回?我们需要使用一个临时字段,新建一个新的数组,剔除首次购买时间。我们可以使用IIF函数,把首次消费时间返回为NULL,其他的按照原值返回。公式如下:

IIF( {fixed [Customer ID] :min([Order Date])} =[Order Date], null, [Order Date])

如果创建了第一个字段,也可以使用上面的第一个字段替换,简化为:

IIF( [1st purchase date ]=[Order Date], null, [Order Date])

这个字段暂且命名为[Repeat Purchase],返回的是顾客剔除首次消费日期外的其他消费日期,再次基础上,我们再用fixed LOD+ min函数,返回第二次消费日期即可,如果直接在上面的基础上修改,就是:

2nd purchase date = {Fixed [Customer ID] : MIN([Repeat Purchase])}

如果不使用中间临时字段,直接在上面的临时字段上修改,那么结果就是:

{ FIXED [Customer ID]:min(IIF({fixed [Customer ID] :min([Order Date])}=[Order Date],null,[Order Date]))}

这样就生成了 第二次消费日期。

至此,我们就使用Fixed LOD返回了每个顾客的两次消费日期,接下来,我们需要使用datediff函数,以季度为参数,计算两次日期的间隔,然后生成视图。需要注意的是,视图中的日期,使用的是首次消费的日期。

Quarters to Repeat Purchase = datediff(‘quarter’,[1st Purchase],[2nd Purchase])

Screen Shot 2018-11-29 at 08.10.50.png

//要点:使用fixed LOD返回两个固定的消费日期(第一次和第二次),这是背景信息的关键,之后就是datediff函数和可视化了。

 

15、各个客户阵列的年度购买频率

【Jan 31, 2019】上篇文章写于2018年11月份,至今过去两个月,留下了两个案例迟迟没有动笔。今天重点分享一下最后、最难的案例——

在每一个阵列(即顾客的获客年份)中,购买至少1次、2次、3次以至于N次的顾客的占比
What percent of customers from each cohort (year of acquisition) purchased at least 1, 2, 3, N times in 2014?

几个关键词:阵列(获客年份)、至少购买X次(意味着要累计计算)、占比(意味着要计算总额百分比)

按照「可视化焦点+引用背景」的分析维度,

  • 可视化焦点是不同阵列和购买次数的总额百分比,两个维度,一个表计算;
  • 视图中缺乏的背景信息是“至少购买1次、2次、3次以至于N次”的顾客数量,以及阵列信息。

在此基础上,我们也可以分为几步:

  • 计算顾客的获客年份和每年的顾客消费频次
  • 计算“在每个阵列中,购买1次、2次、3次、N次的顾客数量”
  • 在上面基础上,增加“至少”,也就是“至少购买1次、2次……的顾客数量”,
  • 在上面基础上,计算“至少……顾客数量”的总额百分比。
  • 1 –

先说阵列,也就是每个顾客的获客年份,这个相对简单,参考案例2的阵列分析,相当于给每个顾客返回一个最早购买日期对应的年份。有两个结果一样的方法:

第一种,LOD获得每个顾客的首次购买日期,然后在使用时增加Year函数

  • 1st order date =  {Fixed [customer ID]: MIN([order date]) }
  • Year( [1st order date]  )

第二种方法,直接返回每个订单日期的年份,然后返回最小值

  • 获客年份 =  {Fixed [customer ID]: MIN(  Year ([order date]) )}

Screen Shot 2019-01-31 at 9.40.43 AM.png

  • 2 –

其次,我们需要计算“至少购买1次、2次、3次以至于N次”的顾客数量,先不说“至少”,其实就是计算不同购买次数的顾客数量。这个就是案例1 的原题,分析方法如下:

命题:客户的购买频率分布,即购买过1次、2次、3次……N次的顾客数量。

  • 可视化焦点:不同购买次数下的顾客数量。
    • 可视化维度:购买频次(1,2,3,N)
  • 需要引用的背景信息:每个顾客的购买次数
    • fixed [customer ID] : countd(order ID)

不过在这个题目中,我们还需要增加一个维度,消费的年份,结果就是:每个顾客在每个年份的购买次数。

Screen Shot 2019-01-31 at 11.55.17 AM.png

-3 –

有了获客年份,和每个年份的顾客消费频次,我们就可以完成第二步了和第三步了,难点在于“至少购买1次、2次……”如何累计。

正常而言,我们使用running total会自动按照从前向后的顺序计算,不过这里我们需要倒过来,至少购买一次的顾客数量包含了后面的所有顾客数,至少购买三次的数量包含了后面购买四五六次的顾客数……,看下面的截图,这里需要指定表计算的sort order。不过这里需要说明,有多种选项都可以指向一个排序,要注意意义的正确性。

Screen Shot 2019-01-31 at 12.01.51 PM.png

-4 –

在上面绝对值的基础上,增加百分比分析,这里需要注意的是分子是什么?是每个获客年度的顾客总额。在此处,我深感还有一点点没有完全领悟的地方,所以不敢细说,担心误导大家。大家不妨先看一下我自己做的对比图。详细的文件,可以在后面下载。

Screen Shot 2019-01-31 at 12.22.56 PM.png

至此,案例15其实是前面多个用法的汇总和升级,其中有夹杂了表计算的灵活运用,可以说是熟练使用LOD的试金石。

 

下载我的LOD案例,部分有解读,特别第15个:

LOD系列

  1. 【Tableau】详细级别表达式LOD_详尽入门3.0(1)
  2. 【Tableau】详细级别表达式LOD_位置与语法(2)
  3. 【Tableau】详细级别表达式LOD_终极实践指南与资源大全(3)
  4. 【Tableau】详细级别表达式 LOD 核心要点回顾(4)
  5. 【Tableau】LOD15大详细级别表达式-深度解读
  6. 【Tableau】15大详细级别表达式-会员分析案例

Nov 26, 2018
Nov 27, 2018
Dec 11, 2018 update
Jan 31, 2019 update 案例15