2014-12-02 62 views
1

我是新來伯特,所以我可能會做這種錯誤的方式設置...BIRT:數據與動態表名

我需要做的是在報表中顯示的一些統計數據。我想在一些特殊的表格中準備數據(我想使用物化視圖,但是在通過JDBC連接到我的數據庫時未能在Birt報表設計器中找到它 - 所以我將使用表格)。

我需要繪製的典型圖表是: - X軸上的月份 - Y軸上的值。

對於Y軸,會有多個系列......但我不知道有多少。每個系列數據都將從我剛剛在上面討論的那些特殊報告表中提取。

我有兩個主要問題: - 如何在圖表上顯示N系列,N未知? - 如何動態化數據集中的表名稱?

有沒有更符合Birt-ish的方法?也許我從一開始就完全錯了,真的不知道。

謝謝你的幫助。

+0

對於使用MViews,考慮爲MView創建一個SYNONYM。然後配置BIRT以在JDBC數據集首選項中顯示同義詞(在JDBC數據集編輯器中顯示爲「Show Aliases」複選框) – hvb 2014-12-03 08:04:13

回答

2

數據庫不允許使用常規查詢參數來動態化表名,所以我們需要通過腳本來處理。

最簡潔的方法是使用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」菜單,我們可以創建儘可能多的系列。

+0

非常感謝數據表示提示。我使用了「多行系列」方法。順便說一句,你提到的報告真的很酷 - 是visoneo你的產品?你的風格如此精細,報告只是CSS而已? – Mat 2014-12-03 11:33:15

+0

是的,它是:)這些報告是使用100%的BIRT Eclipse設計師的本地樣式功能設計的,但我承認它需要一點點練習才能獲得這種結果。如果這可能爲您自己的報告提供寶貴意見,我很高興。 – Dominique 2014-12-03 12:07:41