反饋已提交
網絡繁忙
類似通訊、監視行業,每天都有海量資料生成,資料庫表中總資料量非常大,而報表中往往只要獲取當天的幾百筆資料就可以了。
如果使用範本參數,就需要先取出所有資料,再進行過濾,取數+過濾,將消耗大量時間,極大影響報表的查詢效率。而資料集參數在資料庫查詢時就已經完成了資料過濾,所以使用資料集參數設計的查詢報表會比使用範本參數的效率高。
定義資料集時,透過在 SQL 語句中新增 ${para} 格式的內容,即可定義資料集參數,定義完成後,使用方法和範本參數一緻。如下圖所示,下拉框選擇【華東】,點選【查詢】,只查詢出報表中華東地區的銷售資訊。
注:資料集參數不與資料集綁定,多個資料集中的同名參數為同一個參數,參數值以最後一次指派為準。
資料集 SQL 查詢語句中可以使用參數 ${} 動態地生成過濾條件, ${} 執行結果與 SQL 語句連接起來形成最終的查詢語句,傳遞給資料庫執行。SQL 語句中可以使用多個 ${} ,定義多個參數使用。
使用 ${} 定義參數時,{ }內寫入的內容即為定義參數的內容,其中可以使用 FineReport 所有內建函式,如 if 函式、len 函式等。{ }中除了 FineReport 內建函式名、常數、字串連結文法外,其他變數就是資料集參數。
譬如: SELECT * FROM {銷量} where 地區 = '${地區}' 中定義的資料集參數為 地區 。
注:定義資料集參數時,盡量不要在${}中直接使用{ 、},可能會無法解析。若必須在${}中直接使用{ 、},需要使用 函式 CONCATENATE 轉義,例如:SELECT * FROM 銷量${'{'}語句會出現報錯,需要將語句改為 SELECT * FROM ${CONCATENATE("銷量{")},即可正常查詢。
帶有資料集參數的 SQL 語句寫好後,點選資料集定義介面【預覽】按鈕時,若顯示出定義的資料集參數。則表明資料集參數定義成功。如下圖所示:
在參數位置輸入值後點選確定,參數值就會代入 SQL 語句中,查詢出資料。
如下給出幾種常見的應用方式,使用者在使用時按實際場景調整即可。注意,因為資料集參數用在 SQL 查詢語句中,所以在使用時,特別要注意文法和對應資料庫型別的 SQL 文法匹配。
如要定義一個【地區】參數,透過此參數過濾資料。建立資料集時,就可以在 SQL 查詢語句中定義一個資料集參數 地區 :SELECT * FROM 銷量 where 地區 = '${地區}'。
SQL 語句中,其他內容都是確定的,唯有 地區 不確定,當地區對應不同值時,資料集也將查詢出不同地區的資料。
如果要實現多選查詢,就可以結合 SQL 語句 in 的用法定義一個參數,如:SELECT * FROM 銷量 where 地區 in ('${地區}')。
輸入參數值時注意要和資料庫文法一緻,如查詢華東華北的資料 SQL 文法為 SELECT * FROM 銷量 where 地區 in ('華東','華北'),輸入參數值形式應該為 '華東','華北',這樣加上定義時的 ('${地區}') 就會連結成正確的文法。
定義資料集參數時,可以使用 FineReport 所有內建函式。如需要定義一個地區參數,當地區為空時,查詢所有地區的資料;當 地區 不為空時,查詢對應地區的資料:SELECT * FROM 訂單 where 1=1 ${if(len(地區) == 0,"","and 貨主地區 = '" + 地區 + "'")}。
定義時,先使用函式 len 獲取參數的長度,然後使用 if 函式進行判斷。
如果地區參數的長度為 0,則內容為空,SQL 連接後為 SELECT * FROM 訂單 where 1=1。
如果地區參數的長度不為 0,則將字串 and 貨主地區 = '、參數地區、' 連結成一句 SQL ,如地區的值為華東,那麼參數定義部分的執行結果為and 貨主地區='華東',完整的 SQL 語句就變成:SELECT * FROM 訂單 where 1=1 and 貨主地區='華東'。
如果在資料過濾中,需要多個過濾條件,則可以定義多個資料集參數,如:SELECT * FROM 訂單 where 1=1 ${if(len(地區) == 0,"","and 貨主地區 = '" + 地區+ "'")} ${if(len(province) == 0,"","and 貨主省份 = '" + province + "'")}。
其中使用了兩次 ${},定義了兩個資料集參數 地區和province,定義過程解譯可參考第二章第2節。
定義資料集參數時,也可以透過一些邏輯判斷巢定義多個資料集參數。如:SELECT * FROM 銷量 where 1=1 ${if(len(地區)!=0," and 地區='"+地區+"'",if(len(product)=0,""," and 產品='"+product+"'"))}。
if 函式是 FineReport 內建公式,變數地區和product是資料集參數,如果len(地區)!=0,即地區參數不為空,即以SELECT * FROM 訂單 where 1=1 and 貨主地區='地區'查詢,如地區為空,則要判斷 len(product),若product參數為空,則不連結任何查詢條件,即查出所有資料,否則以 SELECT * FROM 訂單 where 1=1 and 產品='product'查詢。
建立資料集 ds1,資料庫查詢對話框中寫入 SQL 查詢語句 【SELECT * FROM {銷量} WHERE 地區='${地區}'】,相當於在資料庫查詢語句中定義一個資料集參數【地區】。點選右下角【重新整理】按鈕,下方資料集參數管理面板會顯示已經建立好的資料集參數【地區】,設定它的預設值為【華東】。點選【確定】,即同時完成了資料準備和定義資料集參數的工作。如下圖所示。
設定表格樣式,其中給表格選擇預定義樣式 【Head】型別的樣式,標題字體自動置中。如下圖所示。
將資料集中的欄位拖入到對應儲存格中,字體【置中】,給表格整體新增預定義樣式預設天藍色內外框。如下圖所示。
選中 C2 儲存格,右邊屬性面板選擇【儲存格元素】→【基本】。資料設定下拉框選擇【匯總】→【求和】。如下圖所示。
點選參數面板的【編輯】按鈕,進入參數面板設定介面。如下圖所示。
右上角元件設定面板會顯示沒有新增元件的參數,點選 【地區】或者點選【全部新增】,將參數的預設元件新增到參數面板。
注1:參數與元件是透過參數名稱進行綁定的,也就是說當元件名稱與參數名稱一緻時,參數與元件就進行了綁定,即在 Web 端給元件指派就相當於給參數指派。
注2:如果不想點選【全部新增】或【參數】快捷新增預設元件,也可以直接從元件欄中將元件拖曳到參數面板中,修改元件的名稱與參數名稱一緻,即可將元件與參數進行綁定。
點選自訂元件的【編輯】按鈕,選擇【下拉框元件】型別,讓使用者透過下拉框選擇參數值。如下圖所示。
要想報表預覽時點選【下拉框】可以出現參數值的選項,則需要設定下拉框的資料字典為銷量表下的地區欄位。參數面板選中【下拉框元件】,右邊屬性面板選擇【屬性】→【資料字典】,點選資料字典【編輯】按鈕,彈出資料字典設定對話框。資料字典的型別設定為【資料庫表】,資料庫為 【FRDemoTW 】,選擇資料庫表為【銷量】,欄名實際值和顯示值都為【地區】。如下圖所示。
注:元件綁定資料字典時,當資料集中有和元件同名的參數時,不要使用,否則將造成循環引用,使得範本出錯,譬如這裡的 ds1 。
點選【標簽元件】,將元件值命名為【地區:】。將【查詢】按鈕往左邊拖曳,形成緊湊式佈局,讓元件面板更加美觀。再次點選參數面板的【編輯】按鈕,完成參數元件的設定。如下圖所示。
儲存報表,點選【分頁預覽】查看報表。
下拉框選擇【華東】,點選【查詢】,只查詢出報表中華東地區的銷售資訊。
下拉框選擇【華北】,點選【查詢】,只查詢出報表中華北地區的銷售資訊。
行動端查看報表的方式參見 報表行動端預覽。
下拉框選擇【華東】,點選【查詢】,只查詢出報表中華東地區的銷售資訊。下拉框選擇【華北】,點選【查詢】,只查詢出報表中華北地區的銷售資訊。
已完成範本可參見:【%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Primary\Parameter\資料集參數.cpt】
點選下載範本:資料集參數.cpt。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙