背景
在目前我接觸過的輕量級BI工具中,我最喜歡的是MS Power BI。
喜歡的理由粗暴直接:
-
自帶輕量級ETL工具Power Query,在資料倉儲不完善的場景下特別有用;
-
視覺化的建模方式,拖拉放,所見即所得;
-
強大的DAX,不但能定義Measure,還可以編寫迴圈等高階查詢;
-
通過Embed方式嵌入Web應用,無縫整合在自己的應用中;
如果只是個人使用,我覺得這簡直是一個完美的工具了。但是,凡事就怕但是,在企業級應用中,當前版本的Power BI有幾個不太方便的地方。對我而言,最不能忍的一點就是資料需要完全匯入到PBI檔案之後才能使用(官方提供了Direct Query模式,僅支援部分資料來源)。
所以呢,一直想要尋找一款趁手好用的輕量級開源BI產品。雖然嘗試過Superset,Metabase等知名產品後,但總覺得有各種不方便。最近看到一款國內開發的產品CBoard,簡單使用之後,覺得還是挺驚豔的。雖然目前CBoard還有各種不完美的地方,但是我仍然覺得值得一試。
準備及安裝工作
JDK1.8
略
Maven 3
CBoard專案需要使用maven編譯,所以先安裝maven
# 解壓maven
cd /usr/local
tar zxvf apache-maven-3.3.9-bin.tar.gz
# 設定環境變數
vi /etc/profile #增加下列配置
export MAVEN_HOME=/usr/local/apache-maven-3.3.9
export PATH=${MAVEN_HOME}/bin:${PATH}
# 配置好maven倉庫,這裡推薦一個阿里雲的maven映象
vi /usr/local/apache-maven-3.3.9/conf/settings.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
複製程式碼
PhantomJS 2
如果要使用看板匯出和郵件功能,需要安裝PhantomJS 2.1+
# 需要依賴的包,主要是fontconfig-devel
yum install -y gcc gcc-c++ make git openssl-devel freetype-devel fontconfig-devel
# 用phantomjs去擷取中文頁面可能會出現亂碼的情況,安裝字型可以解決
yum install -y bitmap-fonts bitmap-fonts-cjk
# 解壓
tar xvf phantomjs-2.1.1-linux-x86_64.tar.bz2
# 建立軟連結
ln -sf /usr/local/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
複製程式碼
下載原始碼
使用的版本是0.4.2
git clone https://github.com/yzhang921/CBoard.git
git checkout branch-0.4.2
複製程式碼
初始化後設資料
當前版本(0.4)的後設資料儲存僅支援MySQL,Oracle,所以先使用MySQL。官方提供了兩個樣本檔案來初始化演示內容,也可以使用空白資料庫自己從新建立。因為已經嘗試過演示庫,所以這一次從零開始建立。
create database cboard;
use cboard;
source sql/mysql/mysql.sql;
複製程式碼
修改配置檔案
在正式編譯程式碼之前,可以先修改配置檔案。需要修改的部分包括
- 後設資料連線資訊(本例中是MySQL 的 cboard庫)
- 郵件伺服器配置(用於匯出看板的定時任務)
vi src/main/resources/config.properties
複製程式碼
選擇平臺預設顯示語言為中文
vi src\main\webapp\org\cboard\Settings.js
複製程式碼
# 修改引數為cn
// CBoard settings
var settings = {
preferredLanguage: "en" // 可選值en/cn: cn切換中文
}
複製程式碼
由於原始碼依賴中預設包含了SQLServer的JDBC驅動,但是該驅動在公有的Maven倉庫中不存在。我的使用環境中不涉及SQLServer資料庫,所以把pom中的下面依賴移除
vi pom.xml
複製程式碼
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
複製程式碼
編譯原始碼
mvn clean package
複製程式碼
部署
-
拷貝CBoard\target\cboard.war到tomcat的webapp目錄
-
啟動tomcat
-
預設登入使用者名稱和密碼: admin/root123
使用CBoard
在官方中文手冊中,對每一個步驟都有很詳細的說明。所以我這裡只把自己測試過程中的部分環節記錄下來。這裡還是要讚揚一下,國產的開源軟體在文件上能做到這個程度,真的很不錯。
資料來源
CBoard支援多種資料來源(JDBC,Kylin,Saiku,等),不過我們目前最常用的還是JDBC。按照標準的JDBC連線字串格式填入引數即可,如下圖我使用的是PostgreSQL作為資料倉儲。
資料集
CBoard中的資料集,就是Cube。所以建立資料集的過程,也就是設計維度,層次,度量的過程。
和其他BI平臺不同,CBoard中並不需要指定維度表和事實表,而是直接使用查詢語句得到的星型模型結果。作為一個輕量級BI,我認為這種方式是很合適的,帶來的直接好處是,不需要依賴資料倉儲層的主題模型,甚至在沒有星型模型的場景下,也可以使用SQL獲取資料,並且隨時根據需求變化來調整SQL語句。
設計資料集步驟如下圖
- 提供SQL語句獲取星型模型的結果,這裡我直接使用了檢視。
- 如果提供了實時間隔,那麼這個資料集會自動重新整理,假如我在SQL中使用時間函式獲取5分鐘內的資料,就需要在這裡設定一個重新整理週期。
- 查詢結果的所有欄位,是維度和指標的候選項。
- 維度同時支援單一維度(如上圖中日期)和層次維度(如上圖中YQMD),瞭解OLAP的都知道是啥區別。
- 指標列中不需要指定計算方式,即只提供欄位,不提供聚合函式。這裡也體現出輕量級的設計思路,把選取聚合函式的動作放到使用時確定,好處是指標數量會變得比較少。
- 可選表示式可以執行簡單的計算,如 sum(A)/count(B)這種計算,但是無法實現同比環比等複雜操作。
- 設定常用過濾條件,在後面設計圖表的時候很方便。
圖表設計
圖表設計非常簡單,就和設計EXCEL透視表一樣,拖放行,列,指標,然後預覽微調。有透視表使用經驗即可快速上手,如下圖
看板設計
當前版本中,我覺得看板設計是一個比較大的缺憾。因為沒有提供所見即所得的拖放操作,所以在設計看板的過程中感覺總是有點彆扭。CBoard中的做法是,把頁面劃分為行,然後在每一行中劃分列,通過指定列的寬度來實現同一行放置多個圖表。這種方式可以實現粗放的設計意圖,但是對於一些精細化的設計就無能無力了。
如下圖分別顯示了設計階段和展示階段的看板,可以看到看板上的元素是如何對應位置的
定時任務
定時任務可以實現在固定的時間把看板內容作為郵件傳送,這個功能非常實用。不過我發現的一個問題是,傳送的看板資料會忽略看板級別的引數,只使用資料集和圖表級別的引數。
定時任務設定非常簡單,我這裡就不截圖了。
缺憾
在我測試的版本(0.4.2)中,我還發現幾個不太完善的地方,希望在後續的版本中可以改進。
- 資料集中不能直接設定同比環比等操作。對輕量級BI來說這個要求要點高,我目前知道可以在Cube層直接設定之中複雜指標的只有MDX和DAX兩種方法。
- 看板設計中還沒有實現拖放,所以有一些精細化的佈局不能實現。雖然新增加的全屏監控看板,已經可以實現拖放式佈局(我還沒有深入使用這個功能)。
- 匯出/郵件功能,不能根據看板上設定的過濾器來匯出。我在測試中每次匯出的郵件都是完整的資料集內容,沒有找到僅匯出一部分資料的辦法。不知道是不是我的操作姿勢不對。