GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

Davinci 用户体验

2020 年 2 月 11 日

Davinci用户体验

导读:同比和环比是衡量企业某个数据周期性增长速度变化的重要指标,但是一味的看数据,我们很难对增长率的大小做出比较,这个时候就需要可视化工具来帮助我们。小编这次又“编造”了另外一组数据,利用 Moonbox 写出 SQL 求同比环比增长率,最后借用 Davinci 展示出来。具体请看正文~


特别鸣谢


感谢万能的 Wormhole 一姐王小燕同学 & Moonbox 大神王浩同学 提供 SQL 技术支持!


一、Introduction


环比指本期统计数据与上期统计数据做对比,如 2018 年 2 月的数据与 2018 年 1 月的数据做对比。


同比指本期的统计数据与往年同期的统计数据做对比,如 2018 年 1 月与 2017 年 1 月的数据做对比。


同比和环比都反映变化速度,但侧重点不同:利用环比,我们会看到数据的短期趋势,但是这个数据可能是因为受到季节等因素的影响;而同比则更加侧重反映长期的大趋势,这样我们分析数据也就规避了季节的因素。


图 1 是小编随意编造的一组很简单的数据,表头包括年、月、场次、观众人数、票房及广告收入,用英文表示是为了之后写 SQL 的时候方便一些。



图 1


暂且称这组数据为“ABD 虚拟影院相关数据”,接下来,就是借助 Davinci 展示同比环比的时刻啦!


二、Process


Step 1:增加数据源


点击 Source 界面右上角“+”,在 Source List 里新增数据源(图 2),上传 CSV 文件至指定数据库中(图 3),小编使用的数据库为 MySQL。



图 2



图 3


上传完 CSV 文件之后,就来到了我们特别重要的一步:写 SQL、求出同比环比增长率。


计算同比环比可借助 SQL 里的 window 窗口函数实现。MySQL 数据库 8.x 版本才支持 window 函数,然而小编所用数据库版本为 5.x,升级比较麻烦,所以小编在这里使用 Moonbox 计算同比环比增长率。步骤如下:


(1)把 CSV 文件对应数据源挂载到 Moonbox 计算引擎中。



图 4


(2)在 Source 界面继续添加来自 Moonbox 的数据源,小编将其命名为“growthSource”,连接 Url 写 Moonbox jdbc 服务地址(例:jdbc:moonbox://localhost:10010/growthSource),注意将 Moonbox jdbc 驱动放至 Davinci lib 包下。



图 5


点击保存,就新增了一个 JDBC 类型的数据源。


Step 2:添加 View


点击 View 界面右上角“+”,出现图 6 界面。【View 是 Davinci 中非常重要的概念,所有的 SQL 逻辑都需要在这里创建,所有在图表上展示的数据都是通过这里的 SQL 获取,可视化建模和团队数据权限控制也在这里进行。(引自 Davinci 用户手册)】



图 6


点击图 6 左上角的“选择一个 Source”,选择上一步中新增的“growthSource”数据源,接着就是写 SQL 语句了,求同比与环比增长率的 SQL 语句分别如代码块 7、代码块 8 所示。


col 1col 2
1<span style=``"font-family: 黑体, SimHei;"``>select g1.year,g1.month, g1.box_office_mln, g1.last_year_month_box_office_mln, round((g1.box_office_mln - g1.last_year_month_box_office_mln)/g1.last_year_month_box_office_mln * ``100.0``, ``2``) asbox_office_mln_year_growth, g1.advertising_revenue_mln, g1.last_year_month_advertising_revenue_mln, round((g1.advertising_revenue_mln - g1.last_year_month_advertising_revenue_mln)/g1.last_year_month_advertising_revenue_mln * ``100.0``, ``2``) ``as advertising_revenue_mln_year_growth, g1.screening_ths, g1.last_year_month_screening_ths, round((g1.screening_ths - g1.last_year_month_screening_ths)/g1.last_year_month_screening_ths * ``100.0``, ``2``) asscreening_ths_year_growth, g1.audience_mln, g1.last_year_month_audience_mln, round((g1.audience_mln - g1.last_year_month_audience_mln)/g1.last_year_month_audience_mln * ``100.0``, ``2``) ``as audience_mln_year_growth from (select g.year, g.month, g.box_office_mln, lead(box_office_mln) over(partition by g.month order by g.year desc) aslast_year_month_box_office_mln, g.advertising_revenue_mln, lead(advertising_revenue_mln) over(partition by g.month order by g.year desc) ``as last_year_month_advertising_revenue_mln, g.screening_ths, lead(screening_ths) over(partition by g.month order by g.year desc) aslast_year_month_screening_ths, g.audience_mln, lead(audience_mln) over(partition by g.month order by g.year desc) ``as last_year_month_audience_mln from GrowthRate_SQL g order by g.month, g.year desc) g1;<br></span>


代码块 7


col 1col 2
1<span style=``"font-family: 黑体, SimHei;"``>select g1.year,g1.month , g1.box_office_mln, g1.last_month_box_office_mln, round((g1.box_office_mln - g1.last_month_box_office_mln)/g1.last_month_box_office_mln * ``100.0``, ``2``) ``as box_office_mln_month_growth, g1.advertising_revenue_mln, g1.last_month_advertising_revenue_mln, round((g1.advertising_revenue_mln - g1.last_month_advertising_revenue_mln)/g1.last_month_advertising_revenue_mln * ``100.0``, ``2``) asadvertising_revenue_mln_month_growth, g1.screening_ths, g1.last_month_screening_ths, round((g1.screening_ths - g1.last_month_screening_ths)/g1.last_month_screening_ths * ``100.0``, ``2``) ``as screening_ths_month_growth, g1.audience_mln, g1.last_month_audience_mln, round((g1.audience_mln - g1.last_month_audience_mln)/g1.last_month_audience_mln * ``100.0``, ``2``) asaudience_mln_month_growth from (select g.year, g.month, g.box_office_mln, lead(box_office_mln) over(partition by g.year order by g.month desc) ``as last_month_box_office_mln, g.advertising_revenue_mln, lead(advertising_revenue_mln) over(partition by g.year order byg.month desc) ``as last_month_advertising_revenue_mln, g.screening_ths, lead(screening_ths) over(partition by g.year order by g.month desc) ``as last_month_screening_ths, g.audience_mln, lead(audience_mln) over(partition by g.year order by g.month desc) ``as last_month_audience_mln from GrowthRate_SQL g order by g.year, g.month) g1;<br></span>


代码块 8


注:这里小编增加了两个“View”,分别是 yearGrowth 和 monthGrowth。另外,为了方便计算,在写 SQL 时,四列主数据的后面生成了一列新数据,用来表示去年同月或同年上月的数据。


点击右下角“Execute”执行 SQL 语句,yearGrowth 和 monthGrowth 里面的数据分别发生如下变化:



图 9



图 10


点击“Model”进行可视化建模,也就是数据中,哪几项用作维度,哪几项用作指标。更改完毕后,点击“保存”。在这两个 View 中,小编仅用年、月作为维度,其余都作为指标。


Step 3:制作 Widget


可视化组件 Widget 是 Davinci 中功能最强大也最复杂的部分。同一个数据视图可以被多个可视组件使用,并用不同的图形展现。


在展示同比环比数据方面,我们一般会用柱状图或者折线图来表示,而在 Davinci 所支持的透视驱动和图表驱动里,都有柱状图和折线图。它们具体有什么区别呢?让我们在实例中感受一下吧~


注:想了解透视驱动和图表驱动?请参考 Davinci 用户手册:


https://edp963.github.io/davinci/widget_guide.html


点击 Widget 界面右上角“+”,选择一个 View。选择完毕后,出现图 11 所示界面。



图 11


其中,分类型字段对应 View 中设置的是维度的字段,数值型字段对应指标字段。当鼠标悬停在图形图标上,系统提示图形的配置要求,满足条件生成图形。


例如,小编想要了解一下 2017 年下半年各月票房的环比增长率趋势,用透视驱动中的柱状图表示。在这个需求中,简简单单拖拽几个字段就能配制出小编想要的图表。


选择“monthGrowth”这个 View,将鼠标放在柱状图图标上,我们会发现要做这个柱状图会需要“0 到多个维度”及“1 到多个指标”。既然小编想看的是各月环比增长率,那维度这里我们就需要放上“month”字段(点击字段下拉菜单可以排序),指标则是票房环比增长率字段。


接下来我们就需要用到“筛选”一项,在小编的原始数据中,年份里包括 2017 和 2018 年,月份里有 12 个月。这里小编的要求是“2017 年下半年”,因此需要将“year”和“month”字段都拖到筛选栏里,并且按照自己需求配置筛选。这几项配置完以后,出现了如图 12 所示界面:



图 12


如果觉得单单只看图形,不够清晰明了,我们还可以将票房环比数据拖进标签栏,最终如图 13 所示:



图 13


当然,大家也可以根据自己的喜好配置柱状图颜色、标题颜色及大小以及坐标轴颜色等(图 14)。



图 14


点击右上角“保存”,小编就成功制作了一个 Widget。当然,这个 Widget 也可以用折线图来表示(图 15),完全看个人需求~



图 15


再例如,小编想试试用图表驱动里的折线图来展示一下 2018 年各月广告收入的同比增长率。这时候就要选择“yearGrowth”这个 View 了。然后将鼠标放在图表驱动的折线图图标上,我们会发现要做这个折线图需要“1 个维度”及“1 到多个指标”。


同样,将“month”字段拖入维度栏,“广告收入同比增长率”字段拖入指标栏。


Hmmmmm,就完成了。(图 16)



图 16


是不是过于简单了?


但是大家有没有发现一个问题:在这个数据配置栏里并没有“标签栏”,但是折线图中依然有数字。


原来这里的标签设置在样式配置中。


勾选样式配置中的“显示标签”,数字就出现在了折线图中(图 17)。



图 17


且慢!小编似乎发现了折线图可以变换面貌。点击了一下,发现果然平滑的折线图更符合小编心意。于是最终的“2018 年各月广告收入同比增长率”折线图制作完成!(图 18)



图 18


最后例如,小编想看一下 2018 年各月场次的增减与各月广告收入的多少有没有关系。透视驱动和图表驱动里的柱状图和折线图都可以表示,小编暂且选择透视驱动里的折线图。


同样还是将需求所需字段拖入维度栏和指标栏 — “month”拖入维度栏,“广告收入”和“场次”拖入指标栏,把“year”拖入筛选栏,选择出 2018 年。完成!(图 19)



图 19


值得一提的是,在这里我们还可以按照自己喜好变换指标栏中的图形。(图 20)



图 20


于是,小编就这样靠着拖拉拽完成了很多 Widget 的制作。


三、Display


最终,我们来到了展示界面。在展示界面,分别有 Dashboard 和 Display 两种展示方式。Dashboard 里面有很多更为高级的功能,比如联动关系配置和钻取设置。


然而,肤浅的小编暂时被 Display 展示吸引住了,所有兴趣都挂在了 Display 上面,因此,本文中小编只介绍 Display 展示,Dashboard 功能之后再做详细介绍。


下面我们来介绍一下 Davinci 的 Display 展示功能。


其实也没有什么介绍的,直接上图吧!



图 21 简约风



图 22 漫画风



图 23 科技风


如图所示,在 Display 的展示中,我们可以自己更改背景颜色或上传背景图片。设置好背景之后,点击左上角的“Widgets”图标,上传自己想展示的图表,排列成自己喜欢的形状,风格任君选择,一个个大屏就这样制作完成!


以上便是小编用 Davinci 展示同比环比的过程。由于数据是自己编的,难免会有不符合实际之处,敬请大家谅解。


另外,Davinci 一直在不断的成长中。未来,我们还是支持在 Davinci Widget 中直接计算出同比环比增长率这项功能,还请大家耐心等待,继续支持。


因为你们的支持,是我们不断前进的动力!


本文 Display 设计方面很大一部分是借鉴了 Davinci 用户做出来的大屏,当然这里只 copy 到一点皮毛,要学习到大神所制 Display 的精髓还有很长的路要走。还请各位大神能不吝赐教,多多放上自己用 Davinci 制作出来的精美 Display 或者形成教程小文,让大家更多的学习精美大屏制作方法~


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/227


2020 年 2 月 11 日 20:24209

评论

发布
暂无评论
发现更多内容

备战金三银四,Java程序员看完这十本Java进阶必备书籍,薪资能涨20K

Java架构之路

Java 程序员 架构 面试 编程语言

金融 真的需要区块链技术提升效率吗?

CECBC区块链专委会

金融

区块链技术解决监管痛点 首批6家券商加入“中证链”节点

CECBC区块链专委会

区块链

一篇让你彻底了解http请求报文和响应报文的结构

Java架构师迁哥

牛掰!阿里人用7部分讲明白百亿级高并发系统(全彩版小册开源)

996小迁

Java 架构 面试 并发’

第九周 性能优化(三) 作业 「架构师训练营 3 期」

feiyun123

第九周命题作业

cc

阿里架构师分享面试文档:Dubbo+Kafka+MyBatis+redis+Spring

Java成神之路

Java 程序员 架构 面试 编程语言

Elasticsearch Document 的 _version 元数据

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

设计模式【2.1】-- 简单工厂模式怎么演变成工厂方法模式?

秦怀杂货店

设计模式 工厂模式 23种设计模式

宝马等支持为车辆创建“出生证明” 利用区块链技术跟踪车辆历史

CECBC区块链专委会

宝马

架构师训练营第九周课后作业

万有引力

如果公司要招一个人代替你

哈撒啦岛

产品经理训练营

使用 Docker 部署 RabbitMQ 没有日志?添加这两条配置,轻松搞定

AlwaysBeta

Docker RabbitMQ 消息队列 消息中间件

[JetPack] androidx.lifecycle库中ViewModel的新旧版本API差异

Changing Lin

android JetPack

小喜量化炒币机器人系统开发|小喜量化炒币机器人APP软件开发

开發I852946OIIO

系统开发

2021金三银四面试脚本!夜读互联网Java开发27大专题,杀入阿里定级P7

程序员小毕

Java spring 架构 面试 分布式

学设计模式前先了解下设计模式分类

爱笑的小雨

设计模式

Java 程序经验小结:编程更好的使用泛型以替代原生态类型

后台技术汇

28天写作

第九周学习心得

cc

看视频学习困难,这一份Redis实战文档,阿里架构师推荐收藏

Java成神之路

Java 程序员 架构 面试 编程语言

Java开发不会Redis?Java开发掌握好Redis在面试中是个大加分项。

Java架构之路

Java 程序员 架构 面试 编程语言

迁移到 Go Modules

Rayjun

go Module

524页《Java中高级程序员必备核心知识》总结,令人犹如醍醐灌顶

Crud的程序员

Java 架构

张小龙:视频号是什么?| 视频号 28 天 (16)

赵新龙

28天写作

Mybatis【14】-- Mybatis如何实现一对多查询?

秦怀杂货店

数据库 mybatis

产品经理训练营笔记-产品思维和产品意识(上)

.nil?

产品经理训练营

周六

Tango

七日更

悟透前端 | 参悟Javascript中的call和apply

devpoint

JavaScript 前端 call apply

左手字节,右手阿里,我是如何通阿里架构师的java面试文档,拿到多家大厂offer的

Java成神之路

Java 程序员 架构 面试 编程语言

阿里架构师深度学习java虚拟机心得PDF、不愧是进了阿里的大牛

Java成神之路

Java 程序员 架构 面试 编程语言

DNSPod与开源应用专场

DNSPod与开源应用专场

Davinci用户体验-InfoQ