1. 概述
1.1 版本
FineBI 版本 | 新增功能 |
---|---|
6.0 | - |
1.2 應用場景
隨着 JavaScript 的流行,JSON 格式的資料也被越來越廣泛的使用,但是由於 JSON 格式的靈活性,把這類資料結構和其他資料一起分析的時候,就會面臨結構不統一導致無法分析的問題,在 FineBI 需要安裝插件,本文詳細介紹如何使用 JSON 資料集。
1.3 功能簡介
JSON 資料集插件可對 JSON 格式的資料進行處理,方便在 FineBI 中使用。
2. 插件介紹
2.1 安裝插件
插件下載請點選:JSON 資料集插件
安裝插件方法請參見:插件管理
2.2 定義 JSON 資料連結
1)以管理者身分進入數據決策系統,點選「管理系統>資料連結>資料連結管理>建立資料連結>所有」,可新增 JSON 資料連結,如下圖所示:
2)點選「JSON」,配置JSON資料連結。如下圖所示:
注:JSON 資料連結配置儲存後,選中資料連結,點選右側按鈕,可修改資料連結名稱。
設定項的詳細說明如下表所示:
設定項 | 說明 |
---|---|
位址 | 位址可以支援參數,和資料集一樣,注意提供一個預設參數供設計的時候查詢用 注:支援 HTTP 和非自簽章 SSL 憑證的 HTTPS |
帳號密碼 | 輸入帳號和密碼進行認證,不需要認證就不填寫 |
請求型別 | GET 模式和 POST 模式的參數傳遞方式不一樣,GET 是連接到 URL 上,POST 是放到 HTTP 請求體中,並且 POST 模式的參數需要自己新增 |
快取有效期 | 預設快取時間為 0 ,表示不啟用,且支援叢集,可以有效的提升 JSON 資料集的效率 注:V9.3.3 版本插件支援 |
普通參數 | 普通參數即放在 Body 中的,通常說的 GET 和 POST 即普通參數 |
頭參數 | 頭參數即放在 Head 裏面的。常用不變的量一般都是走 header, 因為每次請求都帶 header |
編碼 | 如果檔案是非 UTF-8 編碼的,就需要在原始編碼這一欄選擇對應的編碼,否則無法正確的解析正文資訊 |
需注意以下幾點:
V9.3.3 版本的插件,腳本引擎支援自主選擇 JavaScript V8 或者 Java(預設),在無法支援 JavaScript V8 的機器上自動使用 Java 版本的腳本引擎。
新增參數型別取決於使用者伺服器需要接收什麼型別的參數。
建議使用者獲取參數時使用 .json 檔案而不是單純的API。
2.3 建立 JSON 資料集
點選「伺服器資料集>JSON資料集」,資料集名稱為「JSON資料集」,選擇建立的 JSON 資料連結,輸入查詢語句$.store.book[*],點選「儲存」按鈕即可。如下圖所示:
設定項介紹如下表所示:
設定項 | 說明 | 本文範例 |
---|---|---|
資料集名稱 | 使用者可自訂,不可為空 | JSON資料集 |
資料連結名稱 | 選擇已建立的 JSON 資料連結 | 本文 3.1 節定義的JSON資料連結 |
鍵排序 | 是指對獲取出來的列名做排序。預設即為不開啟 | 預設 |
預讀排名 | 先遍歷所有的資料,把列名獲取出來,可用於 JSON 結構不整齊的情況,會稍微的降低效率。預設即為不開啟 | 預設 |
查詢語句 | 輸入查詢語句 | $.store.book[*] 查詢出書店中所有的書資訊,查詢結果如下圖所示: 注:$.store.book[*] 是 JSON 的固定引用方式,代表取出 store 下 book 的全部資料 |
$.store.book[*].category 取出 category 列的資料,查詢結果如下圖所示: | ||
$.store.book[?(@.price<10)] 取出價格小於 10 的書籍,查詢結果如下圖所示: |
2.4 傳參方式介紹
三種傳參方式差別如下表所示:
模式 | 傳遞方式 |
---|---|
GET | 連接到 URL 上 |
POST_FORM | 需要傳的是 key-value,可以新增動態參數 |
POST_RAW | 只要 value 就可以了,可以新增動態參數 |
傳參方式具體介紹請參見:JSON 資料集插件 的 2.3 節內容。
3. JSON 過程資料集
使用 JavaScript 腳本,將 JSON 物件轉換為二維表。這種方式可以解決所有不能直接用 JSON 資料集的場景,可以根據使用者自己的資料結構客製腳本,進而實現和報表的對接。
注: 建立和使用 JSON 過程資料集,需要使用 2019-04-03 及以後版本的 JAR 包,插件需要更新到 9.2.3 及以後版本。
3.1 建立 JSON 過程資料集
以管理者身分進入數據決策系統,點選「管理系統>資料連結>伺服器資料集>JSON過程資料集」,資料集名稱為「JSON程式資料集」,選擇建立的 JSON 資料連結,輸入腳本語句,點選「儲存」按鈕即可。如下圖所示:
3.2 取出所有語句
獲取所有書籍的資料,腳本語句如下所示:
var books = $.store.book;
var rowCount = books.length;
console.log("行數為:" + rowCount);
var table = [];
var column = [];
books.forEach(function(value, index) {
var row = [];
for (var key in value) {
row.push(value[key]);
column.push(key);
}
console.log("該行共有" + row.length + "列");
table.push(row);
});
return merge(table, unique(column))
腳本中內建函式和變數的說明如下表所示:
內建函式和變數 | 含義 |
---|---|
$ | 表示 JSON 內容的物件 |
unique(array) | 將陣列進行去重,主要用於列名處理 |
console.log(info) | 匯出除錯資訊,會在日誌檔案中匯出 INFO 級別的資訊 |
console.error(err) | 匯出錯誤級別的資訊,會在日誌檔案中匯出 ERROR 級別的資訊 |
merge(table, column) | 合併資料集的內容和列名物件 |
books.forEach | JS 遍歷陣列方法 |
查詢出的資料如下圖所示:
3.3 條件取數
取出價格小於 10 的書籍資料,腳本語句如下所示:
var books = $.store.book;
var rowCount = books.length;
var table = [];
var column = [];
books.forEach(function(value, index) {
var row = [];
if (value.price < 10) {
for (var key in value) {
row.push(value[key]);
column.push(key);
}
table.push(row;
}
});
return merge(table, unique(column));
查詢出的資料如下圖所示:
3.4 取出其中某一欄
取出所有書籍的作者集合,腳本語句如下所示:
var books = $.store.book;
var rowCount = books.length;
var table = [];
var column = ["author"];
books.forEach(function(value, index) {
var row = [];
row.push(value.author);
table.push(row);
});
return merge(table, column);
查詢出的資料如下圖所示:
4. 使用JSON資料集/過程資料集
1)以管理者身分進入數據決策系統,新增資料庫表
2)點選「伺服器資料集」,可新增已建立的JSON資料集/程式資料集,如下圖所示:
注:此處 JSON 資料若包含多種資料型別,則在前端使用中可能會有報錯,建議儘量將資料處理成資料型別一致使用。