深入浅出“跨视图粒度计算”--1、理解数据的粒度

作者:王文开 (本篇文章仅限知乎内部分享,如需转载,请取得作者同意授权。)

跨视图数据粒度计算是网易有数推出的新功能,其优点是您可以独立于当前视图用的维度来执行此计算。跨视图数据粒度计算表达式一共有三种,分别是:FIXED,INCLUDE,和EXCLUDE。为了理解在何时/何地/为什么需要使用它,我们首先必须理解:

1、什么是数据粒度?

2、在网易有数中哪些地方会影响视图的数据粒度

1、什么是数据的粒度?

我们假设有一个的表格,其中包含以下字段:OrderIDCustomer NameSales。一共有12行记录:



基础表格

这个表格数据中,OrderID是主键,所以这张表的最明细的数据粒度就是OrderID这个字段,因为这个字段能够区分表中每一条记录。所以可以这么来理解:

能够区分每一行数据的字段称之为该数据的最细粒度。

在这个例子中,我们对“Sales”这个字段进行求平均值。我们按照最细的数据粒度来,是对所有12条记录进行求平均值。


求平均值

我汇总了Sales整列,然后将它除以总行数,即$ 3,059.00除以12。这个结果是每个记录的平均销售额为$ 254.92。

在网易有数中,如果你仅仅将“Sales”字段拖入图表后,聚合方式选择“平均值”,不放置任何其他维度的时候,可以看到,网易有数会默认使用最细的粒度进行计算。


销售额平均值

我们可以看到,这和将“OrderID”放置在Y轴,然后在再对“Sales”进行求平均值,结果是一样的。

接下来,我们考虑使用原始数据中的“Customer Name”维度,来改变“Sales”的聚合粒度。比如我在网易有数中提出了以下的问题:

每位顾客的平均销售额是多少?

现在我们先按照“Customer Name”字段进行排序,重新排列我们表格的数据。


按客户名称排序

接着,让我们按“Customer Name”字段对我们的所有订单进行分组,并按客户的销售额进行汇总。


按客户进行分组

最后,我们可以像以前一样对“Sals”整列进行求和,然后除以新的行数。在这种情况下,我的分母将是8个客户,而不是原来的12条记录了。结果是每个客户$ 3,059.00除以8,等于382.38美元。

也就是,当前对“Sales”求平均值的时候,计算的粒度变了,从原来的“OrderID”,变为了“Customer Name”,

所以,抽象来说:

我们在对任何一个度量进行聚合方式计算的时候,依赖的当前维度对数据的划分。

2、网易有数中的视图粒度

视图,可以简单的理解成图表。

在网易有数的图表数据面板中,有两个区域能够决定您这张图表的粒度。

1 是X轴和Y轴、

2 是 属性面板

1、是X轴Y轴

比如,我在Y轴放入“地区”,X轴放入“销售额”字段,并且“销售额”的聚合方式选择“平均值”



X轴Y轴

然后就会得到下面这张图,这种图相当于是在“地区”的粒度上,对“销售额”取了平均值,

也就是对每个地区下的每一条记录先求和,然后除以该地区下的记录行数。


2、属性面板

属性面板也可以对度量进行粒度的划分,比如你先将“利润”和“销售额”分别放到了X轴和Y轴上,得到下图,因为还没有任何维度对两个指标做切分,代表的是所有行记录销售额和利润的总和,,所以会聚合成了一个点。


当你将“订单ID”放置到属性面板的【细分】栏上后,相当于对图表增加了粒度,此时图表就会进行了细分,展现出每个“订单”的销售额和利润。


不论是X轴,Y轴,还是属性面板,在这些里面放字段都会改变图表的样式。那有没有一种方式能够支持让分析是自由的定义度量的计算粒度,不会受到当前图表视图的粒度影响?

这就是网易有数中的跨视图粒度计算的功能,它的优点是您可以独立于当前视图用的维度来执行此计算。如果我将一个字段拖到X轴,Y轴或属性面板上,那么整个视图将会受到影响。跨视图粒度计算允许我们设置的粒度水平,而与当前视图无关。

跨视图粒度计算计算表达式一共有三种,分别是:FIXED,INCLUDE,和EXCLUDE。在后续文章中,我会对这三个表达式做详细的介绍。

编辑于 2018-04-17