第八章 BIRT交叉報表

8.1 創建交叉報表和統計

一、創建報表和配置數據源

新建一個報表,改好自己的名字,然後next進行下一步。


選擇一個空白報表(Blank Report),單擊finish完成。


新建數據源,這裏使用的是協同數據庫,選擇Date Explore標籤 右鍵單擊Data Sources 新建一個數據源。選擇JDBC Data Source 命名爲 clmpdemo 然後單擊next 


利用JDBC鏈接數據源,然後點擊測試鏈接,提示成功後,點擊finish完成。


注:在應用裏面,可以設置爲JNDI鏈接。具體是在報表文件中,增加一列JNDI設置,如下所示:

  1. <data-sources>  
  2.         <oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="clmpdemo" id="7">  
  3.             <text-property name="displayName"></text-property>  
  4.             <list-property name="privateDriverProperties">  
  5.                 <ex-property>  
  6.                     <name>contentBidiFormatStr</name>  
  7.                     <value>ILYNN</value>  
  8.                 </ex-property>  
  9.                 <ex-property>  
  10.                     <name>metadataBidiFormatStr</name>  
  11.                     <value>ILYNN</value>  
  12.                 </ex-property>  
  13.             </list-property>  
  14.             <property name="odaDriverClass">oracle.jdbc.driver.OracleDriver</property>  
  15.             <property name="odaURL">jdbc:oracle:thin:@127.0.0.1:1521:eccl</property>  
  16.             <property name="odaUser">clmp</property>  
  17.             <encrypted-property name="odaPassword" encryptionID="base64">ZWNjbDIwMDk=</encrypted-property>  
  18.             <!--新增JNDI設置-->  
  19.             <property name="odaJndiName">java:/comp/env/clmp</property>  
  20.         </oda-data-source>  
  21. </data-sources>  

建立一個新的數據集,New data sets ,命名爲clmprfq,點擊next。

構建數據集的sql語句,如下所示:


Sql語句內容如下:

select CLMP.QTLINE.QTL_NAME,

CLMP.QTLINE.QTL_MODEL,

CLMP.QTLINE.QTL_BIDPRICE,

CLMP.QTLINE.QTL_BIDQUANTITY,

CLMP.QTLINE.QTL_REMARK,

CLMP.QUOTATION.QT_VD_ID,

CLMP.QUOTATION.QT_VD_NAME,

CLMP.QUOTATION.QT_US_ID,

CLMP.QUOTATION.QT_US_NAME

from CLMP.QUOTATION,CLMP.QTLINE

where CLMP.QTLINE.QTL_QT_ID=CLMP.QUOTATION.QT_ID

and CLMP.QUOTATION.QT_RFQ_ID=?

創建一個報表參數,命名爲rfqID。如下

創建一個總價的計算列:



然後再數據集clmprfq中引用這個參數,如下圖所示:


數據集到此配置完畢,預覽結果如下:


配置Data Cubes

新建Data Cubes,右鍵new data cubes


爲cubes命名,並設置數據集


創建分組和彙總字段


創建之後形成的多維數據集如下圖所示:


設計報表主體

先切換到Palette標籤,然後拖拽一個Grid(網格)到空白報表中:


網格選取的是1行2列的,如下所示:


在第一行中輸入該報表的標題,在第二行中拖拽一個交叉表:


切換到Data Explorer 選項卡上,將維度,及度量源依次拖拽到相應的交叉表中:


然後增加總價一列,左擊(或者右擊)在出現的選項中有Totals一項,如下圖:


並勾選行和列需要總計的字段,如下圖:


完成後的報表設計如下:


到此,已經基本上完成了,我們可以預覽看下結果


8.2 多維交叉報表和維度過濾

實際上我們還能增加行和列的統計功能,以及增加統計的維度。

新建報表cross.rptdesign,使用示例數據庫,SQL選擇查詢數據源,新建數據集data set

select * from CLASSICMODELS.PAYMENTS

增加計算列yearmonth


year的表達式如下:

var v = row["PAYMENTDATE"];

    v = v.toString();

    v = v.substring(0, 4);

v;

month的表達式如下

var s="";

var v= row["PAYMENTDATE"];

v=v.toString();v=v.substring(5,7);

function aaa(v){    

var s="";    

if(v=="01" || v=="02" || v=="03")s=" 一季度";    

if(v=="04" || v=="05" || v=="06")s=" 二季度";   

  if(v=="07" || v=="08" || v=="09")s="三季度";   

  if(v=="10" || v=="11" || v=="12")s="四季度";

return s;

}

s=aaa(v);

s;

新建多維數據集:


我們把customernumberyear作爲一級交叉列,把month作爲year的二級交叉列,新建交叉表,分別把組和組1放置在交叉表的列頭上:


選中交叉表,在下面的交叉表屬性選項卡下,有行區域和列區域,可以增加統計和小計:


做適當的佈局和美化,如下圖所示:


預覽結果如下:


當然,交叉報表也可以增加映射,過濾器,突出顯示屬性,例如我們增加一個參數

靜態文本框參數persionId


過濾組1/year,篩選條件爲data[“year”]不等於params["persionId"].value


運行時,我們過濾掉2003年的數據,則預覽效果如下:


排序和突出顯示和普通網格報表類似,不作更多案例。

8.3 表頭的設計

關於表頭斜線的繪製,方法有兩個:

第一個是插入一個已經繪製好的圖片:


效果如下:


另一種是用BIRT的方法繪製:

我們新建一個報表diagonal.rptdesign,使用示例數據庫,空白模板,sql選擇查詢數據源,我們新建數據集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

然後新建多維數據集:

行列組分別爲productlineproductname數據集屬性列,摘要爲TOTAL


佈局如下:


我們在表頭插入一個11列的網格,在網格單元格的屬性中,我們可以看到對角線屬性:


修改,增加兩條黑色細實線。

然後在網格里插入文本:

  1. <div style="margin-left:120px; margin-top:10px;">ProductName</div><br>  
  2. <div style="margin-left:50px;">Total</div>  
  3. <br>  
  4. <div style="margin-left:30px;">ProductLine</div>  

值得注意的是,網格的行高度一定要和表頭的行高度一樣,而且必須設置爲固定數值的大小,不是##%


預覽,效果如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章