本文由  网易云发布。

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

现在正式开始跨视图粒度计算表达式的讲解,我们首先来看一下INCLUDE表达式

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

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

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

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

图表对应的SQL和结果

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

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

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

首先,我们还是先来仔细理解一下这个问题。

请注意,“每个月客户花费的平均总金额是多少?” 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表达式进行讲解!

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

相关阅读:

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

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

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

深入浅出“跨视图粒度计算”--2、INCLUDE表达式的更多相关文章

  1. 深入浅出“跨视图粒度计算”--3、EXCLUDE表达式

    本文由  网易云发布. 深入嵌入“跨视图粒度计算”的前面两篇分别讲了 1.理解数据的粒度 2.INCLUDE表达式 这一篇讲一下EXCLUDE表达式的用法. EXCLUDE,中文译为“排除”,顾名思义 ...

  2. WUSTOJ 1208: 计算整数四则运算表达式的结果(Java)

    1208: 计算整数四则运算表达式的结果 参考资料 数据结构(C语言版)严蔚敏 吴伟民 编著----表达式求值 题目   简单四则运算.更多内容点击标题. 保证表达式合法. 运算符只包含:加(+),减 ...

  3. 表达式计算 java 后缀表达式

    题目: 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例 ...

  4. JavaScript深入浅出补充——(一)数据类型,表达式和运算符

    项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一.数据类型 JavaScript中有五种原始类型和一种对象类型 JavaScript弱类型语言中隐式转换 num-0 字 ...

  5. [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  6. MVC 5使用TempData Object跨视图传递数据

    经过一系列显示数据的练习:<MVC 5使用ViewData(对象)显示数据>http://www.cnblogs.com/insus/p/3377178.html<MVC 5使用Vi ...

  7. 面试题42:计算逆波兰表达式(RPN)

    这是一个比较简单的题目,借助栈可以轻松实现逆波兰表达式. 题目描述: Evaluate the value of an arithmetic expression in Reverse Polish ...

  8. [LeetCode] 150. Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  9. MVC 5使用TempData(对象)跨视图传递数据

    在控制器写好TempData:然后在Index.cshtml写一个链接,为了是让用户点击这个链接,能链至PageA()这个Action至. @Html.ActionLink("Show to ...

随机推荐

  1. 二叉查找树迭代器 · Binary Search Tree Iterator

    [抄题]: 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 对于下列二叉查找树,使用迭 ...

  2. actionBar_Tab导航

    actionBar配合碎片使用  初始化actionBar要注意设置actionbar的导航模式 package com.qf.actionbar04_tab; import java.io.File ...

  3. mysql中float、double、decimal三种类型,以及数值产生误差的原因

    单精度浮点数用4字节(32bit)表示浮点数,采用IEEE754标准的计算机浮点数,在内部是用二进制表示的,如:7.22用32位二进制是表示不下的,所以就导致不精确了,存取会出现误差. mysql中f ...

  4. JS如何获取PHP循环中的ID

    JS如何获取PHP循环中的ID  kaalrz 二路公交车    结帖率:83.33%   首先抱歉,因为昨天那帖图片几次都不能用,修改到不能再次修改,今天早上回帖又提示没有这个帖,只好重发一次. 如 ...

  5. 深入浅出 JMS(一) - JMS 基本概念

    深入浅出 JMS(一) - JMS 基本概念 一.JMS 是个什么鬼 JMS 是 Java Message Service 的简称,即 Java 消息服务.什么是消息服务呢,我们来看一下 Oracle ...

  6. sd卡不能格式化

    可能是读卡器坏了,还真遇到过,花了一下午,各种尝试,最后发现只是读卡器坏了.

  7. cmd里面怎么复制粘贴

    不要打开快速编辑模式,他只能复制粘贴cmd里面的内容 其实用标记即可. 右键选择标记,然后框选内容后右键就复制了 然后再右键粘贴就行了.

  8. Hibernate中常见的异常处理

    本文引自:http://www.blogjava.net/sy1214520/archive/2008/10/21/235667.html 本文总结Hibernate中常见的异常. 1. net.sf ...

  9. 2018.10.01 NOIP模拟 卡牌游戏(贪心)

    传送门 简单贪心题. 然而考试的时候失了智少讨论了一种情况导致gg. 实际上用到了二分图匹配的思想,L每次找到刚好比当前的牌小一点的出出去,看能匹配几个. 如何处理? 我们先考虑第一种比分策略. 我们 ...

  10. 2018.06.30 BZOJ3083: 遥远的国度(换根树剖)

    3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 512 MB Description 描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国 ...