深刻浅出“跨视图粒度计算”--二、INCLUDE表达式

本文由  网易云 发布。html

 

上一篇,讲了什么是数据的粒度,以及网易有数中,哪些地方可以改变视图上的数据粒度。安全

如今正式开始跨视图粒度计算表达式的讲解,咱们首先来看一下INCLUDE表达式性能

{ INCLUDE [维度] : 聚合表达式 }

咱们用如下的示例数据来举个例子。这份数据显示了在2014年的1月和2月间,有A、B和C三个客户有一些花费记录。大数据

 

首先,我在网易有数中展现这两个月的花费总额,将“Date”字段放置在X轴,而且按照“月”的粒度。“Spend”放置在Y轴,聚合方式选择“求和”,获得下图。htm

网易有数提供拖拽字段的交互方式来完成图表的绘制,但这张图表的背后实际上是生成了一段SQL,以下:blog

 

图表对应的SQL和结果get

这段SQL很容易理解,就是对Date进行了Group by,而后对Spend进行了求和。社区

每月客户花费的平均总金额是多少

此时,我想回答一个问题,我想知道“每月客户花费的平均总金额是多少?”class

首先,咱们仍是先来仔细理解一下这个问题。数据可视化

请注意,“每月客户花费的平均总金额是多少?” vs “每月花费的平均总金额是多少?”是两个不一样的问题。由于数据的粒度不同。这个在网易有数里面该怎么作呢?

其实若是用SQL语言是很容易实现的:

 

 

 

这段SQL语言看似很复杂,但仔细一看,咱们所作的只是从另外一个查询返回的结果集中进行选择,即从红色框的子查询的结果中再进行选择。咱们先来看一下,子查询返回的结果,以下表:

 

 

子查询结果

而后咱们再基于子查询中的结果,对Month作分组操做,获得月份平均值:

最终获得下面的数据集。就是每个月每一个客户的平均总消费金额

每个月客户的平均总消费金额

但这样作存在一个问题,就是为了计算到这个结果,数据必须进行预先汇总。在以前的网易有数中,惟一的解决方案是在数据模型中建立自定义SQL视图,先按月和客户预先汇总的好数据。但这种解决方案很是不理想。由于若是预先进行了汇总,就限制了咱们将数据分红几周或几天的能力,而且咱们没法再访问我的客户。

好消息是,在新版本的网易有数中,不再会被这类问题所烦恼了!


跨视图粒度计算表达式可以让用户在表达式中指定数据的在哪一个粒度上进行计算,

INCLUDE表达式

那咱们如今来正式看一下INCLUDE表达式。在这里,咱们将回答在文章开头部分提出的问题:“每月客户花费的平均总金额是多少?”

还记得之前的解决方案是有多复杂吗?而如今,你只须要建立一个计算字段:

客户总花费

这就是你须要作的一切!

因而,咱们只须要把刚才建立的“客户总花费”拖到Y轴,而后聚合方式取平均值,获得下图

最终结果

有关这张图表背后发生的更多细节,咱们来看一下原始SQL脚本,而且比较一下SQL中的哪些部分与咱们图表的数据面板上的字段对应:

 

 

 

蓝色的 [Month] 对应的是咱们X轴的字段 [月(Date)]

绿色的 [AVG TOTAL SPEND] 对应于咱们Y轴字段 [客户总花费]

橙色的字段其实就是咱们INCLUDE表达式中写的,INCLUDE,中文译为“包括”,能够形象的理解为:在计算时,除了当前图表数据面板上的粒度,还要将INCLUDE后面的粒度包括进去。因此咱们看到在子查询中,咱们会将【Month】也加到子查询里面。

而后基于子查询的结果,再作一次顶层聚合,聚合回当前图表的视图粒度。

是否是很是很方便!

跨视图粒度计算 表达式其实就是对SQL的高度抽象,可以不依赖图表上的粒度,自由的指定度量的计算粒度。经过很是简洁的语法可以知足复杂的分析需求。

这样就可以在一张图表上展现不一样粒度的数据了。好比下图,视图上面虽然只有Date粒度,可是在显示的时候,可以将数据聚合到不一样的粒度。

 

 

展现

以上内容讲了INCLUDE表达式的原理,后续我会继续对EXCLUDE、FIXED表达式进行讲解!

 

网易有数,企业级大数据可视化分析平台,具备全面的安全保障、强大的大数据计算性能、先进的智能分析、便捷的协做分享等特性。能够点击这里免费试用

 

相关阅读:

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

深刻浅出“跨视图粒度计算”--三、EXCLUDE表达式

 

 

了解 网易云 :
网易云官网:https://www.163yun.com/
新用户大礼包:https://www.163yun.com/gift
网易云社区:https://sq.163yun.com/

相关文章
相关标签/搜索