此文已由作者王文开授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

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

现在正是开始CGC表达式的讲解,我们首先来看一下INCLUDE表达式

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

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

示例数据

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

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

图表对应的SQL和结果

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

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

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

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

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

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

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

子查询结果

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

基于子查询求平均值

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

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

但这样做存在一个问题,就是为了计算到这个结果,数据必须进行预先汇总。在之前的网易有数中,唯一的解决方案是在数据模型中创建自定义SQL视图,先按月和客户预先汇总的好数据。但这种解决方案非常不理想。因为如果预先进行了汇总,就限制了我们将数据分成几周或几天的能力,并且我们无法再访问个人客户。

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


跨视图粒度计算表达式(Cross-Granularity Calculation)能够让用户在表达式中指定数据的在哪个粒度上进行计算,

INCLUDE表达式

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

还记得以前的解决方案是有多复杂吗?而现在,你只需要创建一个计算字段:

客户总花费

这就是你需要做的一切!

于是,我们只需要把刚才创建的“客户总花费”拖到Y轴,然后聚合方式取平均值,得到下图

最终结果

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

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

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

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

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

是不是非常很方便!

CGC表达式其实就是对SQL的高度抽象,能够不依赖图表上的粒度,自由的指定度量的计算粒度。通过非常简洁的语法能够满足复杂的分析需求。

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

展示

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

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

相关文章:
【推荐】 Omad群组部署、依赖部署一键解决

转载于:https://www.cnblogs.com/163yun/p/9921752.html

深入浅出“跨视图粒度计算”--2、INCLUDE表达式相关推荐

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

    此文已由作者王文开授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在网易有数中,我们的目标是使数据分析成为一种愉快的行为. 个人认为一款优秀的数据分析工具应该是能够做到:当用 ...

  2. ICCV 2019 | 微软开源跨视图融合的3D人体姿态估计算法,大幅改进SOTA精度

    点击我爱计算机视觉标星,更快获取CVML新技术 今天跟大家分享一篇来自微软亚洲研究院新出并已经开源的3D姿态估计的文章:Cross View Fusion for 3D Human Pose Esti ...

  3. View工作原理(三)视图大小计算过程(measure过程)

    一.android中view的measure过程总概 视图大小计算的过程是从根视图measure()方法开始,接着该方法会调用根视图的onMeasure()方法,onMeasure()方法会对所包含的 ...

  4. 练习:Python 的字符串处理, 一个朴实无华的四则运算计算器,批量计算小学生四则运算表达式

    Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基础那么简单-- My CS ...

  5. java后缀表达式_表达式计算 java 后缀表达式

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

  6. 案例解读华为隐私计算产品TICS如何实现城市跨部门数据隐私计算

    摘要:本文介绍华为可信智能计算服务TICs是如何助力城市跨部门数据实现隐私计算的. 本文分享自华为云社区<基于华为隐私计算产品TICS实现城市跨部门数据隐私计算,助力实现普惠金融>,作者: ...

  7. 中缀表达式计算、后缀表达式计算、中缀转后缀

    代码来源 : bilibili网站 :https://www.bilibili.com/video/av91996256?from=search&seid=174497233083020298 ...

  8. 前缀式计算(前缀表达式)

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括号就 ...

  9. C语言利用栈计算算式(表达式)

    本文介绍如何通过栈来实现计算算式. 首先 我们要通过多个栈对算式进行操作和计算得出答案,在计算前,我们需要先明确整个计算的流程: 获取用户输入并保存 判断算式是否合理 一些预处理-(例如:删除空格,大 ...

最新文章

  1. 用一个栈实现另一个栈的排序
  2. Boost:构造一个流对象,任何发送到此流将标准输出
  3. 窗口分析函数_6_计算累加差
  4. SpringMVC_文件上传
  5. android action bar 风格,自定义ActionBar风格和样式
  6. java 继承 封装 多态 详解
  7. 端口扫描php,php-批量端口扫描
  8. 气象要素色斑图的配色
  9. discuz 登录代码流程
  10. 将计算机屏幕,iPad化身显示器!一款能让平板变电脑屏幕的神器
  11. 有意思的DCDC工作原理
  12. ZZM区块链全球区块文化娱乐相结合的新型网站源码
  13. 《做出好决定》当下决定将严重影响你未来的决定
  14. 我的世界ess服务器信息,我的世界ess指令怎么用 ess指令大全及用法详解
  15. 设置行与行的间隔(行间距)
  16. PID闭环底盘调试记录
  17. 2022年8月及1-8月国内动力电池企业装车量排名:“宁王”第一,“迪王”猛追
  18. 记一次惊险的文件恢复经历Eclipse saved my day
  19. 一.Docker之springboot+docker swam实现负载均衡
  20. 磁场强度 H、磁通量 Φ、磁感应强度 B

热门文章

  1. java服务端开发安全_后端开发:APP与后端交互的安全性
  2. c语言删除字符串s中与c相同的字符串,看不懂这段c语言代码的思路,目的是删除字符串1中与字符串2相同的字符...
  3. 高级排序之分割法(以某数为基准分割)
  4. PHP MySQL学生宿舍管理系统源代码_php高校学生宿舍管理系统
  5. win2003域迁移实战记录
  6. Android调用Java WebSevice篇之二
  7. 洛谷 4178 Tree——点分治
  8. C# 如何理解 ASP.NET Web API 的 REST
  9. Redis Cluster集群知识学习总结
  10. 【转】linux shell 中21含义