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

本文由  网易云发布。

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

现在正式开始跨视图粒度计算表达式的讲解,我们首先来看一下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/

原文地址:https://www.cnblogs.com/163yun/p/8892586.html

时间: 2024-09-30 19:31:41

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

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

本文由  网易云发布. 深入嵌入"跨视图粒度计算"的前面两篇分别讲了 1.理解数据的粒度 2.INCLUDE表达式 这一篇讲一下EXCLUDE表达式的用法. EXCLUDE,中文译为"排除",顾名思义,这个表达式和INCLUDE表达式是对立的,语法规则如下: { EXCLUDE [维度] : 聚合表达式 } 比如我们先做了下图,看了每个"类别"下,各个子类别的总销售额 如果此时我们想在这张图上看每个类别的总销售额,那该怎么做呢? 我们可以使用EX

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

作者:王文开 在网易有数中,我们的目标是使数据分析成为一种愉快的行为. 个人认为一款优秀的数据分析工具应该是能够做到:当用户在使用它做数据分析的时候,已经忘记了工具的存在,而是能够集中关注于发现数据背后揭示的故事.这个可以叫做experience flow,是一种沉浸在数据分析中的喜悦状态. 同时,你一定遇到过这样的情况:有时,你遇到了一个问题,其实是很容易描述清楚的,但当你试图在网易有数中展示并回答,会发现它竟是很难的.此时,刚才提到的experience flow,就没有了感觉,你需要开始思

漫画解读“跨视图粒度计算”,了解有数分析利器

本文来自网易云社区. 刚接触网易有数的用户,可能会认为有数只是一款数据可视化工具,但其实有数不单单能可视化数据,还能对数据进行计算分析,实现复杂的数据分析需求. 本文要介绍的就是有数提供的众多数据分析功能之一-- 跨视图粒度计算(其实就是简单的3个函数,但能实现复杂的分析需求:比如新客贡献分析.留存分析.复购分析.RFM分析等等). 既然要跨视图粒度计算,那我们先来理解两个概念: 粒度.视图. 1.粒度:什么是数据粒度呢,它指的是一份数据的细化程度,这么解释有些抽象,可以看下我制作的一幅漫画(原

【LeetCode刷题Java版】Evaluate Reverse Polish Notation(计算逆波兰表达式)

Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, *, /. Each operand may be an integer or another expression. Some examples: ["2", "1", "+", "3", "*"] -&g

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

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

表达式的计算(中缀表达式转为后缀表达式或逐步计算)

算数表达式的计算,也是很基础的一个问题.花了点时间写了下. 网上很多正确代码.但没有详细说明.虽然不复杂,但是还是写详细点.只有仔细思考过.问题才会在头脑中,觉得简单. 基本有2种方法. 1)中缀表达式转为后缀表达式,是最简洁有力的方法. 2)符合人的计算思路的逐步方法,不推荐使用,只适合锻炼下逻辑能力. 一.中缀表达式转为后缀表达式,是最简洁有力的方法. //更简洁通用的算法,就是把中缀表达式转换为后缀表达式.后缀表达式:不包含括号,运算符放在两个运算对象的后面. //一,无括号的n级符号算法

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

前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括号就是:(2+((3+4)*5)) 然后把运算符写到括号前面就是+(2 *( +(3 4) 5) ) 把括号去掉就是:+ 2 * + 3 4 5 最后这个式子就是该表达式的前缀表示. 给你一个前缀表达式,请你计算出该前缀式的值. 比如: + 2 * + 3 4 5的值就是 37 输入 有多组测试数据,每

逆波兰表达式计算(后缀表达式)

#include<iostream> #include<cstdlib> #include<cctype> using namespace std; template<class T> class stack { private: T* base; T* top; int stackSize; public: stack(int a=100):stackSize(a) { base=top=new T[stackSize]; } ~stack() { del

UVa 327 计算简单C表达式

题意:给出一个C表达式,计算其值.其中操作数只有26个字母,从a到z依次初始值为1到26:操作符有二位的 + 和二位的 - ,和正常意思一样,然后还有一位的自增 ++ 和一位的自减 - - ,都有前缀和后缀两种,都和正常理解的一样.然后计算表达式值,并给出式子中的各变量最后的值.对了,每个变量在表达式中最多只出现一次. 思路:题目最后也有给出思路,就是将所有一位操作符即自增和自减操作符去掉,再将有前缀操作符的变量自增或自减了,然后计算表达式的值,最后将有后缀操作符的变量自增或自减.这里只要在输入