业务篇:维度 & 指标
在业务场景中,维度和指标是基础,清晰准确地定义维度和指标能帮助我们更好地探寻数字背后的含义。下图列举了一些电商常用的指标和维度,你能正确区分吗?
维度
维度是对事物特征或属性的一种描述,一般情况下都为分类变量。单独分析维度是没有意义的,它依赖于指标。上图中,日期、渠道、省份、生命周期都是维度。
假设公司有一个新产品在线上发售,设定的维度字段就是日期、省份、渠道,省份维度下有北京、天津、河北这三个类别。
单独看省份维度得不到任何具体信息,无法知道这三个城市的在此次活动中的具体表现如何。即使是将维度组合,也无法获得有价值的信息。
指标
指标是对事物的具体度量单位,通常情况下都可以用数值来展示。上图中,曝光人数、点击人数是非常常见的基础指标,而利润率、访购率、点击率这类需要通过计算得到的是复合指标。指标虽然有具体含义,但仍需要结合维度讨论。
下面我选取部分维度和指标组合成一张表进行举例分析:
第一条数据的解读是:2022年2月1日,在小程序上点击该产品的用户中有 30% 来自北京,通过小程序下单该产品的用户有 15% 是北京的。
SQL 实现
使用不同维度组合,可以获得不同信息,但是数据并不是简单累加的,需要根据维度重新聚合。比如只看日期和渠道,就能知道小程序和 APP 各自的点击率和购买率,SQL 实现如下:
select dt,channel,click_rate,buy_rate from table group by dt,channel
得到数据为下表,比较发现 APP 的点击率和购买率更高,因此可以在 APP 上增加宣传投入。对于小程序点击率低,需要思考原因,进而做出相应调整。
由于在实际场景中,会考虑不同维度组合,分别查询很麻烦,这时可以通过 Hive 中的grouping sets
实现,它等价于将不同维度的group by
结果集进行union all
。
首先,确定好想看的维度组合,例如:
维度组合 |
日期、省份、渠道 |
日期、省份 |
日期、渠道 |
代码实现如下:
select dt,province,channel,click_rate,buy_rate from table group by dt,province,channel grouping sets( (dt,province), (dt,channel), (dt,province,channel) )
等价于:
select dt,province,channel,click_rate,buy_rate from table group by dt,province,channel union all select dt,province,null channel,click_rate,buy_rate from table group by dt,province union all select dt,channel,null province,click_rate,buy_rate from table group by dt,channel
上述代码得到的数据较多就不做展示了,这里给出例子的建表语句大家可以自行尝试噢。
CREATE TABLE table (`dt` datetime, `province` varchar(2), `channel` varchar(3), `click_rate` varchar(3), `buy_rate` varchar(3)) ; INSERT INTO table (`dt`, `province`, `channel`, `click_rate`, `buy_rate`) VALUES ('2022-02-01', '北京', '小程序', '30%', '15%'), ('2022-02-01', '天津', '小程序', '15%', '9%'), ('2022-02-01', '河北', '小程序', '21%', '10%'), ('2022-02-01', '北京', 'APP', '68%', '62%'), ('2022-02-01', '天津', 'APP', '54%', '46%'), ('2022-02-01', '河北', 'APP', '45%', '36%'), ('2022-02-02', '北京', '小程序', '25%', '14%'), ('2022-02-02', '天津', '小程序', '19%', '10%'), ('2022-02-02', '河北', '小程序', '16%', '8%'), ('2022-02-02', '北京', 'APP', '73%', '66%'), ('2022-02-02', '天津', 'APP', '46%', '40%'), ('2022-02-02', '河北', 'APP', '38%', '30%') ;