8.1 創建交叉報表和統計
一、創建報表和配置數據源
新建一個報表,改好自己的名字,然後next進行下一步。
選擇一個空白報表(Blank Report),單擊finish完成。
新建數據源,這裏使用的是協同數據庫,選擇Date Explore標籤 右鍵單擊Data Sources 新建一個數據源。選擇JDBC Data Source 命名爲 clmpdemo 然後單擊next
利用JDBC鏈接數據源,然後點擊測試鏈接,提示成功後,點擊finish完成。
注:在應用裏面,可以設置爲JNDI鏈接。具體是在報表文件中,增加一列JNDI設置,如下所示:
- <data-sources>
- <oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="clmpdemo" id="7">
- <text-property name="displayName"></text-property>
- <list-property name="privateDriverProperties">
- <ex-property>
- <name>contentBidiFormatStr</name>
- <value>ILYNN</value>
- </ex-property>
- <ex-property>
- <name>metadataBidiFormatStr</name>
- <value>ILYNN</value>
- </ex-property>
- </list-property>
- <property name="odaDriverClass">oracle.jdbc.driver.OracleDriver</property>
- <property name="odaURL">jdbc:oracle:thin:@127.0.0.1:1521:eccl</property>
- <property name="odaUser">clmp</property>
- <encrypted-property name="odaPassword" encryptionID="base64">ZWNjbDIwMDk=</encrypted-property>
- <!--新增JNDI設置-->
- <property name="odaJndiName">java:/comp/env/clmp</property>
- </oda-data-source>
- </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
增加計算列year,month
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;
新建多維數據集:
我們把customernumber和year作爲一級交叉列,把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
然後新建多維數據集:
行列組分別爲productline,productname數據集屬性列,摘要爲TOTAL
佈局如下:
我們在表頭插入一個1行1列的網格,在網格單元格的屬性中,我們可以看到對角線屬性:
修改,增加兩條黑色細實線。
然後在網格里插入文本:
- <div style="margin-left:120px; margin-top:10px;">ProductName</div><br>
- <div style="margin-left:50px;">Total</div>
- <br>
- <div style="margin-left:30px;">ProductLine</div>
值得注意的是,網格的行高度一定要和表頭的行高度一樣,而且必須設置爲固定數值的大小,不是##%:
預覽,效果如下: