1. 程式人生 > >如何使用Java資料集進行web端的多維分析操作

如何使用Java資料集進行web端的多維分析操作

看到文章標題,顧名思義應該也曉得本篇文章的重點內容是要說啥了吧?

 

沒錯,就是想針對程式資料集上的多維分析嘮幾毛錢的!所謂程式資料集,是指資料來源不是來自檔案和SQL,而是由程式現計算出來的。這種情況在許多BI系統中都會出現,BI系統自己管理資料模型,把資料庫擋在後面,不會直接開放SQL,更不會提供檔案讓你直接訪問,訪問資料都要通過程式介面(比如JavaAPI或Webservice)——這樣一來,想要對這些程式介面返回的結果集做多維分析看似就有些困難了。

小編我本著先客戶之憂而憂的服務宗旨,思前想後還是覺得之前的《把 Excel 透視表搬到 WEB 上》和《給一句 SQL 就能做多維分析

》對多維分析的介紹不太夠,所以今天特地再來嘮嘮如何對程式資料集做多維分析。

 

訪問 JavaAPI

API是應用程式程式設計介面,程式開放API就是開放介面,開放後接口返回的程式資料就可以被其他程式呼叫了。

問題來了,在俺們多維分析中怎樣才能對API介面返回的程式資料做分析呢?

簡單,其實是分分鐘搞定的事兒!

步驟一:

最最重要的前提,要麻煩程式猿自定義類,把要返回的結果集封裝在一個靜態方法中

本例小編自己寫了個api,為方法傳入txt檔案路徑,然後將txt內容以文字字串返回。

test.txt檔案內容:

undefined

自定義類TxtTest

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();		
	}
}


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,新增引數和網格內容:

undefined

 

A

1

=invoke(api.TxtTest.readTxttoString,pathName,hasTitle)

2

[email protected]()

3

return 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 檔案資料集

undefined

資料集視窗大家一定都不陌生,多維分析與外部API之間的通道就是通過它指定DFX檔案完成的。

選擇dfx檔案時是不是發現步驟三中建立的dfx被列出來了,前因後果這下明白了吧,猜對了,這個列表預設就是把[安裝根目錄]\report\web\webapps\demo\WEB-INF\files\dfx這個目錄下的所有dfx列出。想要修改這個目錄路徑也是ok的,在 "[demo 應用根目錄]/raqsoft/guide/jsp/olap.jsp" 中新增 JS API 進行指定,如下圖所示:

undefined

選擇dfx檔案,傳遞引數值,點選查詢資料,快取入檔案儲存,資料集就建立完成了!

 

接下來馬上又到了每日開心一刻了,任性拖拽無人阻攔,哈哈!

點選【新增報表】,選擇資料集,填寫報表名稱【確定】

undefined

  

新增報表後,資料集返回的表結構指標就這樣赤裸裸的出來了,接下來就可以拖拖拽拽檢視指標內容了。咋樣,有沒有發現其實這種呼叫JavaAPI的程式資料集也挺好使,只要先把自定義類做好就相當於完成一大半了,集算器dfx只是起到了箇中間呼叫的作用。

undefined

API返回的程式資料不僅可以是txt文字串,還可以是json串。關於json串在多維分析的呼叫我們也有攻略幫您解決,其實很簡單,API裡的內容由您自己做主,只要最終返回的是json串就行,這裡主要就是變通一下步驟三dfx檔案中對json串的處理。

dfx內容作如下修改:

 

A

1

=invoke(api.TxtTest.readTxttoString,pathName,hasTitle)

2

=json(A1)

3

return A2

 

訪問多維分析頁面,新增dfx檔案型別的資料集。

 

聰明的你,看到這裡應該什麼都明白了吧?其實換湯不換藥,重點都在dfx檔案上,只是API返回的型別不同,在dfx中處理方法不同罷了。

 

訪問 Webservice

提起Webservice一定都不陌生,一款跨程式語言和跨作業系統平臺的遠端呼叫技術。關於Webservice的使用原理小編就不班門弄斧在高手面前顯擺了,相信作為資深程式猿的您早已對它瞭如指掌了吧,哈哈

那在我們多維分析裡是否能呼叫這種遠端介面呢?答案必須是肯定的,當然能!

我們已經做了全方位考量,不僅能呼叫JavaApi還能呼叫Webservice介面,方法和JavaApi的呼叫大致類同,具體是哪裡相同哪裡類同請看下例分曉。

下面以手機號碼歸屬地查詢作為示例,介紹對WebService的呼叫(本例使用的WebService服務是國內官方的手機號碼歸屬地查詢所在的服務):

步驟一:

在集算器設計器中新建 webTest.dfx,新增網格內容

 

 

A

B

C

1

=[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(手機號,省份,城市,卡型別)

//建立序表

 

4

for A1

//使用for迴圈,逐個查詢手機號的歸屬地等資訊

 

5

 

=ws_call(A2,"MobileCodeWS":"MobileCodeWSSoap": "getMobileCodeInfo",A4:"mobileCode")

//傳入手機號,從伺服器查詢手機號歸屬地

6

 

[email protected](":")(2).split(" ").insert(1,A4)

 

7

 

[email protected](B6,0)

//將查詢結果作為記錄插入A3序表中

8

return A3

   

 

儲存後將 dfx 檔案放至[安裝根目錄]\report\web\webapps\demo\WEB-INF\files\dfx目錄下。

步驟二:

多維分析中新增 dfx 檔案資料集

選擇dfx檔案,傳遞引數值,點選查詢資料,快取入檔案儲存,資料集就建立完成了!

undefined

dfx下拉列表裡的檔案是從哪裡讀取的,還用小編再提一下嗎?嘻嘻,鞏固下記憶吧,這個列表預設就是把[安裝根目錄]\report\web\webapps\demo\WEB-INF\files\dfx這個目錄下的所有dfx列出。不過這個路徑也是可以修改的,修改方法和JavaApi裡使用時的修改方法一樣。

資料集建立完成後,接下來就是拖拽指標進行分析了

點選【新增報表】,選擇資料集,填寫報表名稱【確定】

undefined

undefined

undefined

將指標拖拽到右側資料顯示區,這樣一來,從WebService伺服器獲取的手機歸屬地的資訊就展現在我們眼前了,是不是很方便呢?

undefined

利用 Tag 標籤新增 dfx 資料集

上面兩種程式資料集在多維分析使用時都是通過介面資料集選單配置的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>

<raqsoft:analysev2 dfxFile="WEB-INF/files/dfx/txtTest.dfx" //指定相對於web根目錄的dfx檔案 dfxParams="pathName='D:/2.json';" //dfx所需的引數 … … />

在Tag標籤中新增dfx資料集,訪問多維分析頁面時會將該資料集預設作為初始資料集,並直接將結果集以明細的形式展現在頁面中。

undefined

 

叮叮叮,關於JavaApi和Webservice程式介面的訪問到此就介紹完了,通過對本篇文章的學習,一定更能領會我們多維分析的妙處了吧。使用dfx資料集訪問程式資料集是直接借用集算器函式輕鬆引入程式資料集結果,當然,除此之外還能利用集算器的計算能力,對程式資料集的結果做二次處理,最終在介面上做拖拽分組、聚合、過濾等等資料分析動作。

但是,我要說但是,這裡都用到了集算器的指令碼,而自寫指令碼的功能是不包含在基本潤乾報表中的,也就是說需要花錢滴。嗯,聽起來有點悲傷,不過,認真關注乾學院,後面我們會主動提供辦法讓你繞過這個檢查,還是不花錢,一定要關注,不可錯過喲!

其實兩種程式介面型別在多維分析的使用中是有一定的共同點的,下圖就能直觀的讓我們看到區別: 

undefined

JavaAPI和WebService兩種程式資料集上的多維分析都是使用的dfx資料集,不同點是dfx檔案中使用的函式不同,這是關鍵點!JavaApi時是先將程式介面進行封裝,然後在集算器中使用invoke函式呼叫自定義類。WebService時則是直接使用函式遠端訪問官方手機號碼歸屬地查詢所在的伺服器獲取手機號歸屬地資料。

其實,如果想實現高效能還可以直接用二進位制格式,但就需要學習集算器的資料型別及相關API了。此處就不過多介紹了。還是那句話,更多關於集算器的學習可參考幫助文件《函式參考》、《教程》。

好了,本篇文章雖然講完了,但它卻已成為我們之間交友學習的開端,還在猶豫什麼,快來加入乾學院吧,帶你瞭解更膩害的多維分析。



作者:sln
連結:http://c.raqsoft.com.cn/article/1539249655403?r=xiaohuihui
來源:乾學院
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。