【摘要】java
當數據源不是來自文件和 SQL,而是由程序現計算出來的,這種狀況在許多 BI 系統中都會出現,BI 系統本身管理數據模型,把數據庫擋在後面,不會直接開放 SQL,更不會提供文件讓你直接訪問,訪問數據都要經過程序接口(好比 JavaAPI 或 Webservice)——這樣一來,想要對這些程序接口返回的結果集作多維分析看似就有些困難了。不要緊!潤乾多維分析分分鐘就能幫您搞定!程序數據集上的多維分析!
web
小編我本着先客戶之憂而憂的服務宗旨,思前想後仍是以爲以前的《把 Excel 透視表搬到 WEB 上》和《給一句 SQL 就能作多維分析》對多維分析的介紹不太夠,因此今天特意再來嘮嘮如何對程序數據集作多維分析。sql
API是應用程序編程接口,程序開放API就是開放接口,開放後接口返回的程序數據就能夠被其餘程序調用了。數據庫
問題來了,在俺們多維分析中怎樣才能對API接口返回的程序數據作分析呢?編程
簡單,實際上是分分鐘搞定的事兒!json
最最重要的前提,要麻煩程序猿自定義類,把要返回的結果集封裝在一個靜態方法中api
本例小編本身寫了個api,爲方法傳入txt文件路徑,而後將txt內容以文本字符串返回。緩存
test.txt文件內容:服務器
自定義類TxtTest:app
package api; import java.io.*; public class TxtTest { //爲方便對本方法的調用,此處需爲靜態方法 //經過對方法傳入txt文件路徑和是否有標題(true/false)兩個參數,將txt內容以文本字符串返回 public static String readTxttoString(String pathName,boolean hasTitle) { final BufferedReader bfr; final String encoding = "gbk"; final File file = new File(pathName); String lineTxt=null; StringBuffer buf = new StringBuffer(); InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding); bfr = new BufferedReader(read); while((lineTxt=bfr.readLine())!=null){ buf.append(lineTxt+"\\n"); } return buf.toString(); } }
將TxtTest.class文件放入WEB應用能加裝到的類路徑下,本例以安裝包自帶的demo應用爲例,所以該文件可放入[安裝根目錄]\report\web\webapps\demo\WEB-INF\classes\api下。
在集算器設計器中新建 txtTest.dfx,添加參數和網格內容:
A1=invoke(api.TxtTest.readTxttoString,pathName,hasTitle)2=A1.import@tq()3return A1
使用invoke函數,調用步驟一中自定義JAVA類中的靜態方法,併爲方法傳入參數。 保存後將dfx文件放至[安裝根目錄]\report\web\webapps\demo\WEB-INF\files\dfx目錄下。至於爲啥要把文件放到這兒,先賣個關子,後面再解釋。
集算器用的invoke函數主要是用來調用用戶自定義函數的,不只能像上面例子這樣返回字符串,還能夠返回其餘多種類型,不過必須使用可與集算器匹配的數據類型,不然有可能在展示或調用時出現錯誤。集算器中經常使用數據類型對應的Java類型以下:
整數java.lang.Integer長整數java.lang.Long浮點數java.lang.Double長實數java.math.BigInteger實數java.lang.Number布爾型java.lang.Boolean字符串java.lang.String日期java.sql.Date時間java.sql.Time日期時間java.sql.TimeStamp二進制數據byte[]
多維分析中添加 dfx 文件數據集
數據集窗口你們必定都不陌生,多維分析與外部API之間的通道就是經過它指定DFX文件完成的。
選擇dfx文件時是否是發現步驟三中建立的dfx被列出來了,來龍去脈這下明白了吧,猜對了,這個列表默認就是把[安裝根目錄]\report\web\webapps\demo\WEB-INF\files\dfx這個目錄下的全部dfx列出。想要修改這個目錄路徑也是ok的,在 "[demo 應用根目錄]/raqsoft/guide/jsp/olap.jsp" 中添加 JS API 進行指定,以下圖所示:
選擇dfx文件,傳遞參數值,點擊查詢數據,緩存入文件保存,數據集就建立完成了!
接下來立刻又到了每日開心一刻了,任性拖拽無人阻攔,哈哈!
點擊【添加報表】,選擇數據集,填寫報表名稱【肯定】
添加報表後,數據集返回的表結構指標就這樣赤裸裸的出來了,接下來就能夠拖拖拽拽查看指標內容了。咋樣,有沒有發現其實這種調用JavaAPI的程序數據集也挺好使,只要先把自定義類作好就至關於完成一大半了,集算器dfx只是起到了箇中間調用的做用。
API返回的程序數據不只能夠是txt文本串,還能夠是json串。關於json串在多維分析的調用咱們也有攻略幫您解決,其實很簡單,API裏的內容由您本身作主,只要最終返回的是json串就行,這裏主要就是變通一下步驟三dfx文件中對json串的處理。
dfx內容做以下修改:
A1=invoke(api.TxtTest.readTxttoString,pathName,hasTitle)2=json(A1)3return A2
訪問多維分析頁面,添加dfx文件類型的數據集。
聰明的你,看到這裏應該什麼都明白了吧?其實換湯不換藥,重點都在dfx文件上,只是API返回的類型不一樣,在dfx中處理方法不一樣罷了。
提起Webservice必定都不陌生,一款跨編程語言和跨操做系統平臺的遠程調用技術。關於Webservice的使用原理小編就不班門弄斧在高手面前顯擺了,相信做爲資深程序猿的您早已對它瞭如指掌了吧,哈哈
那在咱們多維分析裏是否能調用這種遠程接口呢?答案必須是確定的,固然能!
咱們已經作了全方位考量,不只能調用JavaApi還能調用Webservice接口,方法和JavaApi的調用大體類同,具體是哪裏相同哪裏類同請看下例分曉。
下面以手機號碼歸屬地查詢做爲示例,介紹對WebService的調用(本例使用的WebService服務是國內官方的手機號碼歸屬地查詢所在的服務):
在集算器設計器中新建 webTest.dfx,添加網格內容
ABC1=[18810690043,15207579527,13018617766, 13713309396,15810200987,13168889653, 13501321234,13003110868,13310006279, 13003113520,18718391001,13168889659]//手機號
2=ws_client("http://ws.webxml.com.cn/WebServices/ MobileCodeWS.asmx?WSDL")//訪問國內手機號碼歸屬地查詢WEB服務
3=create(手機號,省份,城市,卡類型)//建立序表
4for A1//使用for循環,逐個查詢手機號的歸屬地等信息
5
=ws_call(A2,"MobileCodeWS":"MobileCodeWSSoap": "getMobileCodeInfo",A4:"mobileCode")//傳入手機號,從服務器查詢手機號歸屬地6
=B5.split@1(":")(2).split(" ").insert(1,A4)
7
=A3.record@i(B6,0)//將查詢結果做爲記錄插入A3序表中8return A3
保存後將 dfx 文件放至[安裝根目錄]\report\web\webapps\demo\WEB-INF\files\dfx目錄下。
多維分析中添加 dfx 文件數據集
選擇dfx文件,傳遞參數值,點擊查詢數據,緩存入文件保存,數據集就建立完成了!
dfx下拉列表裏的文件是從哪裏讀取的,還用小編再提一下嗎?嘻嘻,鞏固下記憶吧,這個列表默認就是把[安裝根目錄]\report\web\webapps\demo\WEB-INF\files\dfx這個目錄下的全部dfx列出。不過這個路徑也是能夠修改的,修改方法和JavaApi裏使用時的修改方法同樣。
數據集建立完成後,接下來就是拖拽指標進行分析了
點擊【添加報表】,選擇數據集,填寫報表名稱【肯定】
將指標拖拽到右側數據顯示區,這樣一來,從WebService服務器獲取的手機歸屬地的信息就展示在咱們眼前了,是否是很方便呢?
上面兩種程序數據集在多維分析使用時都是經過界面數據集菜單配置的dfx數據集,其實還能夠經過Tag標籤添加。
在Tag標籤的使用與以前講的SQL數據集大同小異,只是屬性略有不一樣。
Tag標籤添加dfx數據集:
<raqsoft:analysev2 dfxFile="WEB-INF/files/dfx/txtTest.dfx" //指定相對於web根目錄的dfx文件 dfxParams="pathName='D:/2.json';" //dfx所需的參數 … … ></raqsoft:analysev2>
在Tag標籤中添加dfx數據集,訪問多維分析頁面時會將該數據集默認做爲初始數據集,並直接將結果集以明細的形式展示在頁面中。
叮叮叮,關於JavaApi和Webservice程序接口的訪問到此就介紹完了,經過對本篇文章的學習,必定更能領會咱們多維分析的妙處了吧。使用dfx數據集訪問程序數據集是直接借用集算器函數輕鬆引入程序數據集結果,固然,除此以外還能利用集算器的計算能力,對程序數據集的結果作二次處理,最終在界面上作拖拽分組、聚合、過濾等等數據分析動做。
可是,我要說可是,這裏都用到了集算器的腳本,而自寫腳本的功能是不包含在基本潤乾報表中的,也就是說須要花錢滴。嗯,聽起來有點悲傷,不過,認真關注乾學院,後面咱們會主動提供辦法讓你繞過這個檢查,仍是不花錢,必定要關注,不可錯過喲!
其實兩種程序接口類型在多維分析的使用中是有必定的共同點的,下圖就能直觀的讓咱們看到區別:
JavaAPI和WebService兩種程序數據集上的多維分析都是使用的dfx數據集,不一樣點是dfx文件中使用的函數不一樣,這是關鍵點!JavaApi時是先將程序接口進行封裝,而後在集算器中使用invoke函數調用自定義類。WebService時則是直接使用函數遠程訪問官方手機號碼歸屬地查詢所在的服務器獲取手機號歸屬地數據。
其實,若是想實現高性能還能夠直接用二進制格式,但就須要學習集算器的數據類型及相關API了。此處就不過多介紹了。仍是那句話,更多關於集算器的學習可參考幫助文檔《函數參考》、《教程》。
好了,本篇文章雖然講完了,但它卻已成爲咱們之間交友學習的開端,還在猶豫什麼,快來加入乾學院吧,帶你瞭解更膩害的多維分析。
對這方面感興趣的同窗能夠到乾學院上觀看免費商業智能課程。