下面就通過圖表製作軟件FineReport來簡單介紹一下。
工具/原料
圖表製作軟件FineReport7.1.1
大小:148.2M 適用平臺:windows/linux
方法/步驟
模糊查詢語法
模糊查詢是利用“_”表示單個字符和“%”表示任意個字符進行匹配的。一些常見的格式如下:
Select * from 表名 where 列名 like '%'; //查詢出全部
Select * from 表名 where 列名 like 'x'; //完全匹配查詢
Select * from 表名 where 列名 like '_x'; //右為x,前面有一位字符
Select * from 表名 where 列名 like '__x'; //右為x,前面有兩位位字符
Select * from 表名 where 列名 like 'x___'; //左為x,後面有兩位位字符
Select * from 表名 where 列名 like '%x'; //右為x,前面可以有任意位字符
Select * from 表名 where 列名 like 'x%'; //左為x,後面可以有任意位字符
Select * from 表名 where 列名 like '%x%'; //中間為x,左右都可以有任意位字符
結合參數的模糊查詢(用${name}代表上述的x):
Select * from 表名 where 列名 like '${name}';
Select * from 表名 where 列名 like '%${name}';
以此類推。
示例:使用模糊查詢實現參數為空選出全部
新建工作簿,增加數據集ds1,sql語句為:SELECT*FROM 銷售 WHERE 地區 like '%${area}'
效果查看
點擊數據集面板中的預覽按鈕,會彈出參數對話框,如果輸入“華東”,只會顯示出華東地區產品銷售情況:
如果不輸入參數值,則會顯示出所有地區的產品銷售情況
動態表和動態條件
動態數據表
若數據庫中存在兩張表結構相同,只是數據量不同,如何實現不同的人根據需要選擇不同的表進行查看,從而提高查詢效率呢?
實現思路
在定義數據集時,通過if函數來判斷參數的值從而來實現調用不同的數據表,如直接將SQL語句定義成:SELECT * FROM ${if(aa=1,'訂單','訂單1')},即若參數aa=1時,查詢的是訂單表,若aa!=1時,查詢的是訂單1表。
動態條件
若您對錶中的數據進行過濾時,查詢條件是不確定的,有時候想用A列進行過濾,有時候想用B列進行過濾,此時要如何實現呢?
實現思路
在定義數據集時,將條件定義為參數,如SQL語句定義成:SELECT * FROM TableName ${Condition}。
示例
打開模板
打開模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\DynamicSQL\DynamicSQL.cpt。
修改數據集
將數據集修改為:SELECT * FROM 訂單 ${Condition}。
修改參數界面
將參數界面的控件名稱修改為Condition即可。
效果查看
保存模板點擊分頁預覽,輸入動態的查詢條件如:where 貨主地區='西南',便可以獲取貨主地區為西南的數據了,效果如下圖:
參數引用
參數的主要作用是實現用戶與數據的實時交互,即進行數據的過濾;
除了過濾數據外,我們還能在很多情況下使用參數,比如在單元格中引用參數來實現動態標題、根據參數值的不同顯示不同等等。
總之,只要可以使用公式的地方,都可以通過“$參數名”來引用參數來實現各種邏輯結果:
示例—引用參數實現動態標題
如下圖效果,地區選擇華北,報表標題就顯示華北銷售額,選擇華東就顯示華東銷售額,即標題根據地區參數的變化而變化:
打開報表
打開報表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\Parameter\Parameter_2.cpt
公式中引用參數
我們可以直接在公式中通過$para來引用參數,para為參數名,如下調整模板,合併A1至C1單元格,輸入公式=$地區 + "銷售額":
這樣公式的值就會根據參數動態的改變了。
注:FineReport報表中支持輸入公式的地方均可以引用參數,參數引用直接使用$para即可將參數值傳遞過來。
參數為空選擇全部
在使用參數進行過濾時,選擇某個參數值後就會根據選擇的值進行過濾,但是如何實現如下圖效果即不輸入參數值時能夠查詢處數據表中的全部值呢?
由於參數的定義有兩種方式,因此下面我們分別介紹下參數為空選出全部值的做法。
方法一:通過數據集參數
2.1 實現思路
在定義數據集時,通過使用if函數判斷參數的值是否為空,若為空就不過濾參數,若不為空就進行參數過濾。
2.2 示例
打開模板
打開模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\DynamicSQL\DynamicSQL.cpt。
修改數據集
將數據集修改為:SELECT * FROM 訂單 where 1=1 ${if(len(area) == 0,"","and 貨主地區 = '" + area + "'")} ${if(len(province) == 0,"","and 貨主省份 = '" + province + "'")}。
注:where 1=1表示條件永真,防止沒有之後的參數條件時,where多出而導致出錯;len(area)==0表示參數area為空;貨主地區='"+area+"'表示取參數值。
${if(len(area) == 0,"","and 貨主地區 = '" + area + "'")} 表示若參數area為空就不進行過濾,若不為空則貨主地區等於參數值。
修改參數界面
將參數界面修改為如下樣式:
參數控件設置
設置參數area的控件類型為下拉框,數據字典選擇數據庫表,數據庫為FRDemo,數據表為訂單,實際值與顯示值的列名都選擇貨主地區。
設置參數province的控件類型也為下拉框,數據字典為數據庫表,數據庫為FRDemo,數據表為訂單,實際值與顯示值的列名都選擇貨主省份。
效果查看
點擊分頁預覽,不輸入參數值後,直接點擊查詢,效果如上圖
方法二:通過報表參數
3.1 實現思路
在給數據列設置過濾條件的時候,同樣使用if函數進行判斷。
3.2 示例
打開模板
打開模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\ParaNull\ParaNull.cpt。
修改數據集
將數據集修改為查詢訂單表的數據即:SELECT * FROM 訂單。
報表參數設置
點擊模板>報表參數,添加兩個報表參數,分別為area和province。
過濾條件設置
點擊A2單元格,選擇格子上方的過濾按鈕,給A2單元格增加如下圖所示的過濾條件:
注:nofilter表示不過濾,if(len($area)==0,nofilter,$area)表示參數area為空,就不過濾,若不為空則以參數值進行過濾;if(len($province)==0,nofilter,$province)意義相同。
效果查看
點擊分頁預覽,不輸入參數值後,直接點擊查詢效果如上圖。