感动到流泪!数据分析师的福音:跨视图粒度计算

网易大数据2018-06-04 20:41
作者: 王文开 (如需转载,请取得作者同意授权。)

在网易有数中,我们的目标是使数据分析成为一种愉快的行为。
个人认为一款优秀的数据分析工具应该是能够做到:当用户在使用它做数据分析的时候,已经忘记了工具的存在,而是能够集中关注于发现数据背后揭示的故事。这个可以叫做experience flow,是一种沉浸在数据分析中的喜悦状态。
同时,你一定遇到过的情况。有时,你遇到了一个问题,其实是很容易描述清楚的,但当你试图在网易有数中展示并回答,会发现它竟是很难的。此时,刚才提到的experience flow,就没有了感觉,你需要开始思考如何重新处理数据,此时你的分析思路会打断,而不是集中在问题和答案。对于业务分析师来说,这是郁闷的,他们遇到了困境缺不知道如何着手。
如上这些问题的核心是:
数据,需要可以自由汇总到不同的粒度,并且不同粒度的数据能够在一张表里进行展现。
这么说比较抽象,我们来举一个具体的电商场景的例子
某家电商成立于2013年,有一天数据分析师在利用网易有数做数据分析,首先她想看一下每年销售额的增长情况,于是在有数中,很容易做出了如下的柱状图。她很满意,销售额一直在增长。


销售额趋势

此时,她的脑海中出现了新的想法,她想看一下"每年的销售额究竟都是由哪一年的客户贡献的?"
首先我们来分析一下她的问题,什么叫“由哪一年的客户贡献的”?
于是她先在有数中做一个简单的表格,把“客户名称","订单ID","订单日期"放入Y轴,得到如下图表。可以看到,丁君这个客户一共买过4个订单,最早的购买日期是"2013-03-01",那我们就可以认为丁君这个客户是2013年的客户。所以我们就其实就是要在有数中计算出每个客户首次购买时间,这样我们就能知道该客户是哪一年的客户了


试探表格

现在,我们的目标就是计算出“每个客户的首次购买时间”。
怎么做,是不是脑海中浮现出的第一个想法是 min([订单日期]),恭喜你,已经成功了一半了
首先我们创建一个计算度量,如下图


最早购买日期

然后把这个字段加到图上,却发现,并不是我们期待的效果。“订单日期”和“最早购买日期”这两列的数据完全一样。为什么会这样?这就涉及到了图表聚合粒度的问题,这块内容我会在后续其他文章中详细阐述。
这里我想说的是,当前图表中有“客户名称”,“订单ID”,“订单日期”,这些维度字段都会确定图表的聚合粒度,所以min([订单日期]),这个聚合方式是会收到当前图表粒度影响的。所以才会一模一样。


最早购买日期
所以,我们现在需要有一种方式,能够指定这个日期的聚合粒度(维度),且不受图表上的粒度所影响。
网易有数在这个版本中加入了重磅功能:跨视图粒度计算表达式(Cross Level Calculation),下文简称CLC。
CLC,一共有三种形式,INCLUDE,EXCLUDE,FIXED,后边我们一点点来揭开他们。
在当前的例子中,我们会需要用到FIXED表达式,他们的格式看起来像这样:


FIXED表达式
注意,蓝色部分看着熟悉吧,就是刚才那个基本的数据聚合公式----最小值。红色的部分是一个新的容器,它告诉网易有数在执行蓝色部分求最小日期的时候,在哪个数据粒度进行计算,如在FIXED公式中,就是告诉网易有数,仅仅在“客户名称”这个粒度,对订单日期求最小,不考虑任何其他的粒度,也就是不考虑当前图表上的粒度。
于是我们创建了一个计算维度,如下写了FIXED表达式


每个客户的首次购买时间
此时,再把“每个客户首次购买时间”,拖入图表,这下就对了,这个字段不会受到图表上的粒度影响。


每个客户首次购买时间
ok,现在万事俱备了,现在只需要将“每个客户首次购买时间”放到颜色栏,就能区分出每一年的销售额里面,有多少是2013年的客户,有多少是2014年的客户,...贡献的
比如,可以从下图可以看到:
1、2013年是这个电商的第一年,那所有的销售额肯定是当年客户贡献的
2、2014年的销售额中,有224.3万是2013年客户贡献的,有116.8万是2014年客户贡献的


新客销售额贡献情况
如果不想看绝对值,可以将图表改成堆叠百分比柱状图。这样就能看到每年销售额里面,各个年份的客户的贡献百分比。
这样就能看出问题了:
这家电商虽然销售额逐年上升,但是新客的贡献率越来越低
2014年的销售额里面,新客的贡献率只有34.24%
2015年的销售额里面,新客的贡献率降到了9.31%
2016年的销售额里面,新客贡献率更低了


新客销售额占比
这就是网易有数中 跨视图粒度计算 的一个小案例,真是冰山一角,敬请期待后续更多案例!