【时序+表计算】高级案例:顾客复购率矩阵分析

今天在客户哪里做了一个销售人员的转化率分析,充分地使用了高级计算的多个函数,非常具有代表性。这里使用超市数据作为模版,迫不及待地与大家分享,并计划加入到明年的新书中。 由于超市的数据没有销售人员数据,因此这里使用“客户名称”,完成客户的复购率分析。完成的问题描述如下: 各个季度的新客户,在接下来第1、第2、第3……第N季度的复购率分别是多少? ——喜乐君 源文件可以从public下载: 复购率矩阵public 1、问题分析 按照此前问题解析的方法,这个问题是典型的高级分析——同时包含了两个层次。何为高级分析,在问题的筛选器、问题层次和聚合度量中,只有有一个位置包含了另一个层次的聚合。高级的高级分析甚至会同时在多个位置引用其他层次的聚合,比如“购物篮分析”。 主视图问题的维度是“各个季度”,聚合度量是“复购率”;聚合度量依赖于另一个层次的聚合,即每个季度有消费的客户数量除以对应「获客季度」新增的所有客户。我们把每个客户的「获客季度」称之为他所在的矩阵。这有点类似于LOD15案例中的第一题“不同客户矩阵的销售”。 本文创建了一个计算字段:first od ,用来计算每个客户的首次订单日期。在视图中这个日期以连续的季度为层次聚合,统称之为“获客季度”。 1.1 单一层次:每个季度的客户数量 在《数据可视化分析:Tableau原理与实践》第十章中,我介绍了“高级分析”的四个步骤,其中入门之基础,就是先做主视图。先不考虑接下来的矩阵,就是如下的图形。 1.2 在主视图基础上,增加客户所在的矩阵 视图的维度是“季度”,我们要引用“每个客户的首次订单所在的季度”(层次是 客户,聚合是min订单日期),很明显二者是独立的层次,因此使用fixed lod计算。之后把这个字段加入视图中,作为颜色,这样就是“客户不同获客季度矩阵,在接下来各个订单日期季度消费的客户数量”。 这样,我们可以说包含了问题分析需要的两个维度(订单日期季度和客户首次订单日期),以及需要的聚合度量(客户数量)。接下来的关键是调整视图并完成计算了。 2、构建基本的矩阵 上面的颜色字段改为连续季度后,明显线条会很多(如下图)。而且由于日期默认连续,颜色也是渐变的。 数据太多,折线反而显得混乱,我们可以尝试使用数字构建的矩阵代替。构建矩阵需要把日期改为离散,可以使用智能推荐调整。于是就有了下面的矩阵分布。 这样,我们就有了数据的雏形了,不过复购率还为时尚早。这里有两个问题: a、矩阵中仅有每个订单日期季度的消费客户数量,却没有每个“获客季度”(first od)的客户数量总和。缺少这个数据,就无法计算比率; b、矩阵中的数据,仅仅在每一行上有意义,不同获客季度的客户数量不同,因此相互之间的比较就没有意义,因此需要借助每个获客季度的客户数量总和,计算每个消费日期季度的复购比率(相当于获客季度的确定性样本)。 c、每个获客季度的时间不同,接下来的消费日期季度显然也不同。如何比较2017Q3的获客客户 和 2018年Q2的获客客户,分别在接下来了四个季度的复购率,才是关键。此后横轴的绝对日期轴就需要调整。 这个转变有点难度,我们一点点来。 3、增加更高层次的聚合——每个获客季度的客户数量 上面a的问题,就是要找到每个获客季度的客户数量,这个数据,是可以由不同消费日期季度的客户数量,通过不重复的计数计算获得的。获客季度的客户数量,层次高于当前视图。可以用下图的仪表板来表示。我们需要在左侧的工作表中,增加右侧的聚合“每个获客季度的客户数量”。 高于当前视图的二次聚合,优先表计算。这里相当于以每个获客季度为分区,以订单日期季度为方向,计算客户计数的二次求和,可以用window_sum函数计算,更简单的语法是直接使用total函数。即: total( countd([客户名称])) 不过,直接在视图中添加这个计算后,由于度量默认聚合,聚合生成坐标轴,因此矩阵中增加了坐标轴。此时需要字段上右键改为“离散”,此时依然不对,因为计算的分区错误。还需要配合设置计算依据为:订单日期季度。 表计算的关键就是:谁和谁计算,对应的字段是方向。 这样,视图中就有了统一的比较依据。 当然,上面的计算,也可以直接通过“分析——合计”拖拽完成,然后把合计放在左侧,而非默认右侧。这里之所以手动完成,是因为后面计算复购率依然要用。而且,所有的参考线,不过都是表计算的化身而已。 这里增加一个简单的步骤,计算复购率,就是每个矩阵中的客户计数,除以对应获客季度的客户计数,即: countd([客户名称]) / total( countd([客户名称])) 注意,这里的计算依据依然要设置。可以用这个字段替换此前的标签,视图就有了如下的变化。 至此,复购率的计算就完成了。由于这里使用的是每个客户名称的首次订单日期,因此第一个季度自然都是100%。在业务环境中,销售人员的成交通常晚于入职日期,因此首月的转化可以视为客户消费能力和培训效果的指标。 这里最后面临一个问题,虽然可以直观的查看每个获客季度在此后各个季度的复购率,但是无法直观地纵向比较。这就涉及到如何把绝对的日期轴,通过处理更改为相对的日期轴。 4、通过表计算更改坐标轴——公公基准的日期 这个步骤对应TC10的第二个案例,非常经典了。 如何将绝对日期改为相对日期?即相对于每个获客季度的第1、第2、第3……呢?只是日期的次序转化,首先考虑使用Tableau表计算的index函数。 直接在订单日期后输入index(),数值默认生成连续的坐标轴,这里还需要改为离散,如下图。 这里的index是基于所有日期的基准,我们希望仅保留基准index,而不再显示订单日期本身。注意,只是不显示,不能移除,因为订单日期字段是index字段的依据。可以把它拖到左侧标记的“详细信息”中。 此时进入了最重要的一步——如何设置表计算的依据。默认的index只有1,因为它默认采用的相对分区方法(表、区、单元格)无法识别标记中的字段。这里,每个获客日期为独立的分区,index的依据是订单日期——第一个月就是绝对日期的相对坐标而已。因此设置index表计算的计算依据为:订单日期。如下:Continue reading “【时序+表计算】高级案例:顾客复购率矩阵分析”

【Tableau】TC- 表计算(下)快速表计算

在上一篇中,我们通过对比sum、total、running_sum、window_sum介绍了主要的表计算函数,其中有一个非常重要的还没有说,那就是lookup()。我们结合应用,说一下lookup的强大用法,然后介绍一下默认的快速表计算。 一、LOOKUP(expression, [offset]) 这个函数的目的,是返回目标行(指定为与当前行的相对偏移)中表达式的值。 offset是查询时调整偏移的参数,如果偏移量为0,返回自身;直接使用数字,则相当于当前位置的偏移;也可以使用 FIRST() + n 和 LAST() – n ,以分区中第一行/最后一行为基础设定偏移量。如果省略了 offset,则可以在字段菜单上设置要比较的行。如果无法确定目标行,则此函数返回 NULL。 1)如果省略了offset,必须右键“编辑表计算”,指定比较行;这一点需要特别注意。 2)如果指定了offset,返回与目标行中expression的值。 「Nov 9, 2018补充」今天一个客户希望计算一个累计值和另一个累计值的和,第一个累计值就是K-in字段的running_sum,第二个累计值是K-out字段偏移一位的running_sum,因此结果就是: Runnning_sum(sum([k-in]))+lookup( Running_sum(sum([K-out]),-1)   二、快速表计算 在第一篇和本篇的基础上,我们下面说一下常见的快速表计算。Tableau内置了部分常用的表计算,称之为 “快速表计算”,这些快速表计算可以视为是预设好的表计算表达式,使用了上面我们介绍的lookup、first等快速表计算。我们也可以通过把视图的快速表计算拖入度量中查看具体的表计算公式。 比如说,我们在实例中添加了“总额百分比Percent of Total”,然后可以拖入度量生成字段,之后查看它的计算公式,如下图: A 常见快速表计算 第一类的快速表计算与日期无关,常见的七种快速表计算的基本对应关系如下: 汇总 Running Total=RUNNING_SUM(SUM([Sales])) 差异 Difference= ZN(SUM([Sales])) – LOOKUP(ZN(SUM([Sales])), -1) 差异百分比 Percent Difference = (ZN(SUM([Sales])) – LOOKUP(ZN(SUM([Sales])), -1)) / ABS(LOOKUP(ZN(SUM([Sales])), -1)) 总额百分比Percent of Total = SUM([Sales])Continue reading “【Tableau】TC- 表计算(下)快速表计算”

【Tableau】表计算 (上)_聚合计算与表计算函数

更新序言:此文介绍了表计算的关键函数和相互关系。如果要理解表计算的独特性和逻辑,敬请阅读最新文章如下,视频介绍稍后推出: Tableau理解表计算的独特性和逻辑方法  2019/10 update Tableau的表计算分为几类,重点是前面三类。 索引排序函数:index()、size()、first()、last() ——这四个不需要参数; rank()及延伸函数,如rank_dense(),rank_modified()等; 移动计算函数:running_x ,比如 running_sum, running_avg, running_max等; 范围计算函数:window_x,比如window_sum,window_avg,window_max,等 R语言相关计算函数:script_bool()等(我没用过)。 在Tableau中,有多个求和的计算,典型的有 sum() 、total()  、 window_sum () 、 running_sum()四种,今天我们对比一下它们的区别,在何时他们相互等价;并结合起来介绍第一类索引函数。   1、聚合计算与表计算 sum() 是聚合计算,是基于数据源的计算,它的参数就是数据源的字段,比如 sum([sales]),它代表把数据源的每一行的数据都对[sales]字段执行累加计算; 而widown_sum(), running_sum(), total() 都是表计算函数,表计算的特征之一是基于视图中聚合数据的二次聚合计算,因此括号中的参数必须是聚合,比如说 total( sum([sales]) )。 聚合计算:对数据源行级别数据的聚合 表计算:对视图中数据聚合结果的二次聚合 更多聚合函数和表计算函数的不同,可以参考【tableau】如何选择Tableau计算类型? 2、total(expression) total(expression) 、 running_sum(expression)这两个表计算的参数都只有一个,就是要执行视图中数据数据的二次聚合。比如 TOTAL(SUM([数量])) RUNNING_SUM(SUM([数量])) 区别在于,total()是为每个分区返回同一个结果。我们知道,表计算的逻辑是 分区+寻址,total为各个分区求和,每个分区返回同一个数值。而running_sum()则可以为每个分区的每一行返回一个数值。前者是对聚合的聚合,后者这是对聚合的移动聚合。 为了更好的理解total,可以参考一下“总计百分比”这个表计算,它的公式就是sum/total,也就是聚合除以聚合的聚合,从而计算每一行在分区中的占比;因此对于多个行数据而言,一个分区的total结果是一样的。 合计百分比 表计算 : SUM([数量]) / TOTAL(SUM([数量]))    3、Continue reading “【Tableau】表计算 (上)_聚合计算与表计算函数”

【译】Tableau Table Calculation Functions That You Need to Know

原文地址:5 Tableau Table Calculation Functions That You Need to Know September 29, 2014  by Tom McCullough 从一个开发者角度看,Tableau优雅而又最让人惊喜的是高效而容易的处理、计算数据的能力。 计算字段可以让我们对比字段、计算聚合、逻辑判断、合并字符串、转化数据格式,还有非常多的分析和数学算数公式,而这些都不需要改变数据库的数据。计算字段返回一个可用的、随时拖拽的字段到数据窗口,和数据缓存表中,你甚至可以在计算之后再执行二次计算。太神奇了! 为了让计算更加强大,Tableau可以让在完成数据提取之后,增加新的计算。表计算就是用来处理缓存表中的数据,然后在视图返回结果。 这是什么意思呢?一旦生成数据视图,我们可以让Tableau展现类似于数值、条形图、散点图之恋的结果,并在这些基础在计算。表计算的重要之处在于,不想计算字段帮我们对比两个或多个度量,它可以让我们对比单个数值本身。 下面是五个常见的Tableau表计算函数。 In my developer mind, what takes Tableau 8 from neat to amazing is the ability to manipulate, calculate and maneuver data quickly and easily. Calculated fields allow you to compare fields, apply aggregations, applyContinue reading “【译】Tableau Table Calculation Functions That You Need to Know”