1. 程式人生 > >開源|Davinci用戶體驗:你離數據可視精美大屏只差一個Davinci!

開源|Davinci用戶體驗:你離數據可視精美大屏只差一個Davinci!

dba 年份 沒有 界面 ron board orm 部分 c2c

導讀:同比和環比是衡量企業某個數據周期性增長速度變化的重要指標,但是一味的看數據,我們很難對增長率的大小做出比較,這個時候就需要可視化工具來幫助我們。小編這次又“編造”了另外一組數據,利用Moonbox寫出SQL求同比環比增長率,最後借用Davinci展示出來。具體請看正文~

Davinci介紹:Davinci是一個DVAAS(Data Visualization as a Service)平臺解決方案。Davinci面向業務人員/數據工程師/數據分析師/數據科學家,致力於提供一站式數據可視化解決方案。既可作為公有雲/私有雲獨立使用,也可作為可視化插件集成到三方系統。用戶只需在可視化UI上簡單配置即可服務多種數據可視化應用,並支持高級交互/行業分析/模式探索/社交智能等可視化功能。

特別鳴謝

感謝萬能的 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所示。

<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)

<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或者形成教程小文,讓大家更多的學習精美大屏制作方法~

作者:李玲 王小燕

來源:宜信技術學院

開源|Davinci用戶體驗:你離數據可視精美大屏只差一個Davinci!