Pentaho教程:基於Metadata創建report並發布到Pentaho BI Server
眾所周知,Pentaho BI商業智能解決方案提供了兩種reporting工具,即基於Pentaho BI Server的Ad Hoc Query and reporting Tool(WAQR)和更高級的Pentaho Report Designer(PRD)。兩者均工作在由Pentaho Data Integration(PDI)創建的數據倉庫之上(廢話,當然,如果你不使用Pentaho也有其他方案)。區別是,WAQR只能通過JDBC連接、查詢數據倉庫,而PRD除了普通的JDBC連接方式之外,還有Pentaho特有的metadata連接查詢方式(還有OLAP、XML等方式,在此不予討論)!WAQR方式相對簡單明了,登錄Pentaho BI Server之后,創建新的數據倉庫連接便可創建report了。今天要討論的是PRD,尤其是其metadata連接。
利用PRD創建基於Metadata的report
如題,這種方式創建report的基礎是已經創建好的metadata文件,以.prpt結尾。本文假設讀者已經創建好了.prpt文件,並導出為.xmI文件,以供創建report使用。
- 打開PRD,新建report,並保存;
- 為空的report中的Page Header、Report Header、Report Footer、Page Footer等添加相應元素。重點在Group Header和Details;
- 新建Metadata數據連接。打開Metadata數據源編輯器,添加.xmI文件為數據源,並提供創建.prpt文件時所使用的域名(domain),如圖1;
新建查詢(Query),打開查詢編輯器。加入想要查詢的列、排序所用的列和約束條件。這里需要注意的是約束條件,因為通常report會加入一些查詢參數。為了設置參數查詢,需要首先創建參數,通常是通過JDBC獲取數據倉庫中數據表的某一列作為參數值,然后在查詢編輯器中的條件(Condition)欄設置參數查詢。這里注意引用參數的語法:用花括號將參數名包圍起來,即{parameter}。然后選擇對應的比較操作符,比如對於String有Contains、exactly matches和in等,如圖2;
- 上一步完成后,會得到一些返回的列名,將這些列名按需拖入report的Details部分,一個report的主體部分就完成了;
- 如果需要,可以添加Group區域;
- 發布report到Pentaho BI Server,如圖3。前提是已經開啟Pentaho BI Server;
- 為發布report設置發布密碼,可在biserver-ce/pentaho-solutions/system/publisher_config.xml中設置。為該report創建一個目錄,目錄名必須與metadata文件域名一致,比如tth;
- 通過Pentaho Metadata Editor(PME)直接將.xmI文件發布到Pentaho BI Server下同一目錄,即tth。
- 最后,登錄到Pentaho BI Server,刷新metadata和prpt文件,雙擊prpt即可看見生成的report。
特別注意:
如果report中的參數值不唯一,即有多個values,比較參數比較符應該選擇exactly matches而不是in!這點與利用PRD創建基於JDBC的report是參數比較不同,后者對於多值采用in來比較。雖然對於PRD來說exactly matches和in使用效果相同,但一旦發布到Pentaho BI Server就會出現問題,如果你使用in,那么當你為一個參數選擇多個值時就會出現”Report validation failed.”的錯誤!不知道這算不算是該版本Pentaho BI Server的bug。
對於上述這個問題,我曾在Pentaho forum發帖提問(原帖在這里Multi-value report based on metadata failed to load on BI server),但沒有得到回答,還是自己花了很長時間才摸索出來,希望對后來者有點幫助。