如何將Tableau server中的視圖嵌入web頁面
tableau作為可視化數(shù)據(jù)分析軟件中的佼佼者,將數(shù)據(jù)運算與美觀的圖表完美地嫁接在一起。它的程序很容易上手,各公司可以用它將大量數(shù)據(jù)拖放到數(shù)字“畫布”上,轉(zhuǎn)眼間就能創(chuàng)建好各種圖表。
創(chuàng)建與共享絕妙的數(shù)據(jù)可視化內(nèi)容,tableau 為您呈上唾手可得的可視化分析能力。它幫助您生動地分析實際存在的任何結(jié)構(gòu)化數(shù)據(jù),以在幾分鐘內(nèi)生成美觀的圖表、坐標圖、儀表盤與報告。
利用 Tableau 簡便的拖放式界面,您可以自定義視圖、布局、形狀、顏色等等,幫助您展現(xiàn)自己的數(shù)據(jù)視角。另外他還適用于多種數(shù)據(jù)文件與數(shù)據(jù)庫,數(shù)據(jù)可擴展性強,不限制您所處理的數(shù)據(jù)大小。
首先講一下我們今天用到的Tableau的模塊吧:tableau desktop 是用來創(chuàng)建分析,進行數(shù)據(jù)分析的,是分析工具。tableau Server 是用來發(fā)布分析的,發(fā)布給企業(yè)相關(guān)權(quán)限的人,是服務(wù)器。
接下來就讓我們了解一下tableau嵌入視圖的原理吧。
1、客戶端請求數(shù)據(jù):當用戶訪問具有嵌入式 Tableau Server 視圖的網(wǎng)頁時,該客戶端會向 Web 服務(wù)器發(fā)送請求,要求返回頁面地址。
2、Web 服務(wù)器請求Tableau Server:Web 服務(wù)器向受信任的 Tableau Server發(fā)送請求。該請求必須有一個 username 參數(shù)。username 值必須是 Tableau Server 許可用戶的用戶名。如果 Tableau Server 承載多個站點,且視圖在默認站點之外的其他站點上,則 POST 請求還必須包含 target_site 參數(shù)。
3、Tableau Server 創(chuàng)建票證:Tableau Server 檢查發(fā)送請求的 Web 服務(wù)器的 IP 地址或主機名。如果 Web 服務(wù)器作為受信任主機列出,則 Tableau Server 將以唯一字符串的形式創(chuàng)建一個票證。票證必須在發(fā)出后三分鐘內(nèi)兌換。Tableau Server 使用該票證來響應(yīng) POST 請求。或者,如果存在錯誤并且無法創(chuàng)建票證,則 Tableau Server 將使用值 -1 進行響應(yīng)。
4、Web 服務(wù)器將 URL 傳遞給客戶端:Web 服務(wù)器將為視圖構(gòu)建 URL,并將其插入網(wǎng)頁的 HTML 中。Web 服務(wù)器將 HTML 傳遞回客戶端的 Web 瀏覽器。
5、客戶端向Tableau Server 請求視圖:客戶端 Web 瀏覽器將向 Tableau Server 發(fā)送一個請求,該請求包括帶有票證的 URL。
6、Tableau Server 兌換票證:Tableau Server 兌換票證,創(chuàng)建會話,將用戶登錄,從 URL 中移除票證,然后將嵌入視圖的最終 URL 發(fā)送到客戶端。
最后讓拋出重要的代碼來講解一下:
服務(wù)端代碼:
public String index(){ PropertiesUtils props = PropertiesUtils.getInstance(); //tableau server服務(wù)器地址 final String wgserver = props.getProperty("tableau.server.location"); //Tableau Server 許可用戶的用戶名 final String tableAuUser = props.getProperty("tableau.user"); String ticket; String tickUrl = ""; try { ticket = TableauHelper.getTrustedTicket(wgserver, tableAuUser); if ( !ticket.equals("-1") ) { tickUrl = "http://" + wgserver + "/trusted/" + ticket + "/view/names"; } } catch (ServletException e) { logger.error("獲取tableau ticket 失敗。 ",e); } setAttr("tickUrl",tickUrl); render("tableau.html"); } //獲取票證邏輯 public static String getTrustedTicket(String wgserver, String user) throws ServletException { OutputStreamWriter out = null; BufferedReader in = null; try { StringBuilder reqUrl = new StringBuilder(); reqUrl.append(URLEncoder.encode("username", "UTF-8")); reqUrl.append("="); reqUrl.append(URLEncoder.encode(user, "UTF-8")); URL url = new URL("http://" + wgserver + "/trusted"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); out = new OutputStreamWriter(conn.getOutputStream()); out.write(reqUrl.toString()); out.flush(); StringBuilder rsp = new StringBuilder(); in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { rsp.append(line); } return rsp.toString(); } catch (Exception e) { throw new ServletException(e); } finally { try { if (in != null) in.close(); if (out != null) out.close(); } catch (IOException e) { } } }
前臺代碼
這樣我們就完成了將tableau server中的視圖嵌入自己的頁面中。
Tableau JavaScript API:https://onlinehelp.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api.htm
Tableau Server獲取票證:https://onlinehelp.tableau.com/current/server/zh-cn/trusted_auth_webrequ.htm
Tableau編寫嵌入代碼:https://onlinehelp.tableau.com/current/pro/desktop/zh-cn/embed_code.htm
嵌入代碼的參數(shù):https://onlinehelp.tableau.com/current/pro/desktop/zh-cn/embed_list.htm
在這里再說幾個參數(shù)吧
:alerts(values為yes或者no):隱藏工具欄中的“通知”按鈕,該按鈕使用戶能創(chuàng)建數(shù)據(jù)驅(qū)動型通知。 :customViews(values為yes或者no):隱藏工具欄中的“視圖”按鈕,該按鈕使用戶能保存自定義視圖。 :showShareOptions(values為true或者false):控制是否在嵌入視圖中顯示“共享”選項。 :device(values為desktop、tablet、phone):屏幕大小及布局屬性。
web前端
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。