4.1 數據集的設置
4.1.1 SQL選擇查詢數據集
在“新建數據集”對話框,輸入數據集名,選擇“數據集類型”爲“SQL選擇查詢”,再選擇某個JDBC數據源,如下圖所示:
點擊“Next>”進入SQL查詢語句的輸入界面,如下圖所示:
各主要參數含義如下:
可用數據項
默認列出從數據庫中讀出的所有表/視圖/存儲過程。如果數據庫支持架構(Schema),則按Schema進行分組。用戶雙擊某個非根結點,該結點對應的文本將自動添加到右側的SQL查詢語句輸入框。
事實上,“可用數據項”中的項如何顯示也是可以設置的。點擊系統菜單“窗口”->“Preferences”,在打開的對話框的左側,選擇“報表設計”->“數據集編輯器”->“JDBC數據集”結點,如下圖所示:
JDBC 編輯界面設置
該設置界面中參數的含義如下:
從數據庫中預取所有架構:該項設置只對支持Schema的數據庫有效。如果選中,“可選數據項”中初始顯示從數據庫中讀出的Schema;如果未選中,“可選數據項”中初始爲空,直到用戶輸入相應過濾條件,點擊“應用篩選器”後才顯示滿足用戶條件的項。
要顯示的最大架構數:“可選數據項”中最多顯示的Schema數目。只對支持Schema的數據庫有效。
每個架構中要顯示的最大表數:“可選數據項”中每個Schema下最多顯示的表數目。如果數據庫不支持Schema,則指“可選數據項”中最多顯示的表數據。
架構(Schema)
該列表列出從數據庫中讀出的所有Schema。用戶可以選擇某個Schema,點擊“應用篩選器”,使“可選數據項”只顯示指定Schema下的項。
如果數據庫不支持Schema,則該列表是無效的(disable)。
篩選器
輸入字符串,點擊“應用篩選器”,使“可選數據項”只顯示其名稱起始部分可與用戶指定字符串相匹配的表/視圖/存儲過程。在用戶輸入的字符串中,“%”代表任意多個字符(Character),“_”代表任何一個字符。
類型
有“-全部-”/“表”/“視圖”/“存儲過程”四個選項。用戶可選擇一個選項,點擊“應用篩選器”,使“可選數據項”只顯示指定類型的項。
使用標誌符引用
如果選中,則雙擊“可選數據項”中某個非根結點時,該結點對應文本的每項的兩側都會被加上某個符號再自動添加到右側的SQL查詢語句輸入框。事實上,該符號是從對應JDBC 驅動中讀出的(通過java.sql.DataBaseMetaData接口的getIdentifierQuoteString()方法)。如雙擊“可選數據項”內的“Products”結點,則添加到右側SQL查詢語句輸入框的是:”ROOT”.”PRODUCTS”。
顯示系統表
是否在“可選數據項”中顯示系統表。點擊“應用篩選器”後生效。
在右側輸入框,用戶可輸入對應JDBC驅動支持的SQL查詢語句。
動態配置“SQL選擇查詢”數據集
對於已創建的“SQL選擇查詢”數據集,其SQL查詢語句以及查詢最大執行時間是可以在報表運行時動態配置的。在“編輯數據集”對話框,選擇“屬性綁定”,如下圖所示:
各個主要參數如下:
查詢文本
用戶輸入的JavaScript表達式的值在報表運行時動態計算出並被作爲該數據集的SQL查詢語句。例如圖 6中的“查詢文本”爲:
“select * from ” + params[“tableName”].value
這樣,根據報表參數“tableName”的值動態構造SQL查詢語句。
查詢超時(秒)
用戶輸入的JavaScript表達式的值在報表運行時動態計算出並作爲SQL查詢語句的最大執行時間(以秒計)。執行查詢時,該值會通過java.sql.Statement的setQueryTimeout( int seconds )方法傳遞給JDBC驅動。
用戶可點擊“fx”按鈕打開“表達式生成器”對話框來幫助構造JavaScript表達式。
運行帶參數的SQL查詢語句
如果數據集的SQL查詢語句帶有參數,如下圖 7所示:
可按順序將SQL查詢語句中的參數與某個報表參數綁定,以便報表運行時,將報表參數的值賦值給SQL查詢語句中對應的參數。
點擊圖 7左側“參數”即進入參數綁定列表界面,如圖 8所示:
按順序通過“新建…”將SQL語句中的參數與報表參數綁定或爲其提供默認值,如圖 9所示:
對於某個SQL參數,如果不想讓其與某個報表參數綁定,則必須爲其提供默認值:在“默認值”中輸入JavaScript表達式。
“SQL選擇查詢”數據集的其它設置
在“編輯數據集”對話框,點擊左側“設置”,進入設置界面,如圖 10所示:
各主要參數含義如下:
數據提取設置
設置將SQL查詢語句執行結果集中的前多少條記錄作爲數據集的數據源。事實上,如果用戶設置了某個具體值,在查詢執行時,該值會通過java.sql.Statement的setMaxRows( int max )方法傳遞給JDBC驅動。
注意:該項設置不只是在報表設計時有效,在報表運行時依然有效。
Result Set Selection
當SQL執行結果中包含多個結果集(Result Set)時(如“SQL存儲過程查詢”數據集),此設置用於指定那個結果集作爲數據集的數據源。“SQL選擇查詢”數據集的SQL查詢語句執行結果一般爲一個結果集,因此無需設置。
由章節“2創建JDBC數據源”知,BIRT中JDBC驅動的默認搜索路徑爲“\\plugins\org.eclipse.birt.report.data.oda.jdbc_xxx\drivers”目錄(其中“xxx”代表版本號)。如果需要,你也可以以API調用方式通過應用程序上下文(AppContext)來添加JDBC驅動搜索路徑。相對應的應用程序上下文關鍵字定義如表 1所示:
關鍵字 |
描述 |
由org.eclipse.birt.report.data.oda.jdbc.IConnectionFactory. DRIVER_CLASSPATH定義的常量 |
可以是一個字符串以添加一個路徑;也可以是一個java.util.Collection實例以添加多個路徑:其中每項的toString()結果表示一個路徑。 每個路徑是一個jar/zip包或一個目錄的絕對路徑。 |
用戶添加的JDBC驅動搜索路徑優先於BIRT的默認搜索路徑。
另外,我們可以在腳本中動態改變數據集的查詢sql,在報表編輯器的腳本編輯區,我們選中beforeOpen下拉框,在裏面輸入:
- var a = reportContext.getParameterValue("kemu");
- if(a==1)
- {
- this.queryText +="and (a.dbtranamt !=0 or a.crtranamt !=0)";
- }
- if(a==0)
- {
- this.queryText +="and (a.dbtranamt !=0 or a.crtranamt !=0)";
- }
- this.queryText+="order by a.trandate asc,a.subctrlcode asc";
說明:
reportContext.getParameterValue()代表獲取報表參數;
this.queryText代表數據集的查詢sql;
4.1.2 多維數據集
新建一個數據集Data Set,基於樣本數據源
SELECT CLASSICMODELS.PRODUCTS.PRODUCTLINE, CLASSICMODELS.PRODUCTS.PRODUCTNAME,
(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) AS TOTAL
FROM CLASSICMODELS.PRODUCTS, CLASSICMODELS.ORDERDETAILS
WHERE CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE
新建一個參數pMinDealSize,默認值是8000.00
設置Data Set,添加過濾器row["TOTAL"] 大於 params["pMinDealSize"].value
預覽數據:
我們以此數據集爲基礎,創建多維數據集Data Cube:
分別把productline,productname拖到組中,把total拖到摘要字段中。當然,組和摘要都可以用表達式生成器去編輯,聚合條件也可以編輯。
我們新建一個交叉報表,把productline,productname分別拖入交叉表的行數據字段和列數據字段,把total拖入交叉表的統計字段。
在報表查看器中查看,如下圖所示的效果:
至此,多維數據集建立完畢。後文再詳細介紹如何建立交叉報表,怎麼畫斜線,怎麼製作多重交叉報表。
4.1.3 聯接數據集
BIRT報表中允許用戶對已經創建的兩個數據集進行聯接操作,形成新的數據集,該數據集就稱爲聯接數據集。
由於聯結數據集操作是在BIRT報表數據引擎內部執行的,因此它也無法達到數據庫的運算效率。因此,在實際運用這個功能時,一定要考慮相關性能問題。我們建議只針對無法避免的情況才使用。比如異構的(即來源於不同類型數據源的)、離線的而且是報表系統無法直接進行編程的數據集之間的聯結運算。
在創建聯接數據集之前,您需要首先創建了兩個數據集,這兩個數據集之間需要有一個共同的字段用於聯接操作。
打開“數據資源管理器”窗口,右鍵點擊“數據集”,在彈出的菜單中選擇“新建聯接數據集”。
在彈出的新建聯接數據集窗口中,輸入數據集名稱。在下拉列表中分別選擇進行聯接的數據集,並選擇聯接的依據字段以及聯接類型。
點擊“完成”,在編輯數據集窗口中預覽數據結果,或繼續編輯數據集。