隨着 JavaScript 的流行,JSON 格式的資料也被越來越廣泛的使用,但是由於 JSON 格式的靈活性,把這類資料結構和其他資料一起分析的時候,就會面臨結構不統一導致無法分析的問題,在 FineBI 需要安裝插件,本文詳細介紹如何使用 JSON 資料集。
JSON 資料集插件可對 JSON 格式的資料進行處理,方便在 FineBI 中使用。
插件下載請點選:JSON 資料集插件
安裝插件方法請參見:插件管理
以管理者身分進入數據決策系統,點選「管理系統>資料連結>資料連結管理>建立資料連結>所有」,可新增 JSON 資料連結,如下圖所示:
1)FineBI 遠端連結 FineReport 設計器
FineBI 安裝插件後,參考 遠端連結 FineReport 設計器 在設計器中遠端連結 FineBI 。
2)設計器新增 JSON 資料集
連結成功後,進入設計器的伺服器>定義資料連結,新增 JSON 資料連結,如下圖所示:
詳情參見:建立JSON資料連結
1)以管理者身分進入數據決策系統,點選「管理系統>資料連結>資料連結管理>建立資料連結>所有」,可新增 JSON 資料連結,如下圖所示:
2)點選「JSON」,配置JSON資料連結。如下圖所示:
注:JSON 資料連結配置儲存後,選中資料連結,點選右側按鈕,可修改資料連結名稱。
設定項的詳細說明如下表所示:
位址可以支援參數,和資料集一樣,注意提供一個預設參數供設計的時候查詢用
注:支援 HTTP 和非自簽章 SSL 憑證的 HTTPS
http://fine-doc.oss-cn-shanghai.aliyuncs.com/book.json
需注意以下幾點:
V9.3.3 版本的插件,腳本引擎支援自主選擇 JavaScript V8 或者 Java(預設),在無法支援 JavaScript V8 的機器上自動使用 Java 版本的腳本引擎。
新增參數型別取決於使用者伺服器需要接收什麼型別的參數。
建議使用者獲取參數時使用 .json 檔案而不是單純的API。
點選「伺服器資料集>JSON資料集」,資料集名稱為「JSON資料集」,選擇建立的 JSON 資料連結,輸入查詢語句$.store.book[*],點選「儲存」按鈕即可。如下圖所示:
設定項介紹如下表所示:
是指對獲取出來的列名做排序。預設即為不開啓
輸入查詢語句
$.store.book[*]
查詢出書店中所有的書資訊,查詢結果如下圖所示:
注:$.store.book[*] 是 JSON 的固定引用方式,代表取出 store 下 book 的全部資料
$.store.book[*].category
取出 category 列的資料,查詢結果如下圖所示:
$.store.book[?(@.price<10)]
取出價格小於 10 的書籍,查詢結果如下圖所示:
三種傳參方式差別如下表所示:
傳參方式具體介紹請參見:JSON 資料集插件 的 2.3 節內容。
使用 JavaScript 腳本,將 JSON 物件轉換為二維表。這種方式可以解決所有不能直接用 JSON 資料集的場景,可以根據使用者自己的資料結構客製腳本,進而實現和報表的對接。
注: 建立和使用 JSON 過程資料集,需要使用 2019-04-03 及以後版本的 JAR 包,插件需要更新到 9.2.3 及以後版本。
以管理者身分進入數據決策系統,點選「管理系統>資料連結>伺服器資料集>JSON過程資料集」,資料集名稱為「JSON過程資料集」,選擇建立的 JSON 資料連結,輸入腳本語句,點選「儲存」按鈕即可。如下圖所示:
獲取所有書籍的資料,腳本語句如下所示:
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))
腳本中內建函式和變數的說明如下表所示:
查詢出的資料如下圖所示:
取出價格小於 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));
取出所有書籍的作者集合,腳本語句如下所示:
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);
1)以管理者身分進入數據決策系統,新增資料庫表
2)點選「伺服器資料集」,可新增已建立的JSON資料集/過程資料集,如下圖所示:
注:此處 JSON 資料若包含多種資料型別,則在前端使用中可能會有報錯,建議儘量將資料處理成資料型別一致使用。