數據庫不允許使用常規查詢參數來動態化表名,所以我們需要通過腳本來處理。
最簡潔的方法是使用DB存儲過程完成此操作:BIRT數據集查詢只是調用數據庫的存儲過程,並將表名稱作爲參數。下面是使用MySql JDBC進行此類數據集查詢的示例:
CALL `myschemaname`.`mystoredprocedure`(?);
這裏,問號'?'是一個查詢參數,在數據集編輯器中我們將它鏈接到一個代表表名的報表參數。然後這個存儲過程構建一個動態查詢並返回相關數據。
另一種選擇是在BIRT數據集的「beforeOpen」腳本注入表名:
1-在你的數據集,初始化一個任意有效的表名的查詢,例如:
select *
from myvalidtablename
2-在Eclipse設計師選擇您的數據集 - >腳本選項卡 - > beforeOpen
假設表名是在報表參數:
this.queryText=this.queryText.replace("myvalidtablename",params["myTableNameParam"].value);
關於如何處理N系列,它取決於如何在表格中設計數據行。兩種主要情況:
案例1 - 系列是在這樣的多行:
month1;serie1;value
month1;serie2;value
month2;serie1;value
month2;serie2;value
這是因爲它是一個BIRT圖表與「選項Y系列分組」,在動態處理的最聰明的情況下。這是this chart的工作原理:country字段設置爲可選分組,BIRT處理所有內容。
案例2 - 系列在多列:
month1;valueSerie1;valueSerie2
month2;valueSerie1;valueSerie2
在這種情況下,我們需要明確地聲明每個系列。在圖表編輯器中,通過刪除「Value(Y)series」菜單,我們可以創建儘可能多的系列。
對於使用MViews,考慮爲MView創建一個SYNONYM。然後配置BIRT以在JDBC數據集首選項中顯示同義詞(在JDBC數據集編輯器中顯示爲「Show Aliases」複選框) – hvb 2014-12-03 08:04:13