2010-09-16 28 views
1

在不同的表/數據集上重用報表的最佳方式是什麼?如何重新使用不同數據集上的報告?

我有一些內置的BIRT報告,從平面(未歸一)MySQL表獲取數據,而這又是從一個Excel工作表導入數據。

在BIRT,我已經構造我這樣的查詢,這樣我可以改變字段名稱,並重新使用報告:

SELECT * FROM 
(SELECT index as "Index", name as "Name", param1 as "First Parameter" FROM mytable) t 

然而,然後當我切換到新的客戶端的數據,我需要將查詢更改爲新的數據源,這看起來並不可持續,或者不太可能接近良好實踐。

所以... 什麼是好的做法呢?

  • 這是報告問題還是數據庫設計問題?
  • 難道我創建一個標準認爲,報告連接?
  • 如果我有一個標準的看法,我創建具有相同結構的不同看法爲每個數據表,或保持與正確的數據表的引用我的每個運行報告時替換視圖?

令人討厭的是excel表不斷變化 - 添加新列,不同的客戶端以不同的方式命名他們的數據。即使我可以將此標準化,我會將不同的客戶端數據存儲在不同的表中......因此,我需要爲每個客戶端創建一個不同的報告,或者將表名稱傳遞給報告?

回答

2

有兩種方式和你選擇的路徑是真的你是多麼的靈活性具有架構所決定的。

首先,你是通過重命名你的選擇列一個共同的名字,因爲這個名字是什麼是用於將數據綁定到報表上的控制正確的軌道上。您是否考慮過存儲過程來訪問數據?這將從報告中刪除查詢,並允許您在任何數據庫上設置存儲過程以返回必要的列。如果無法卸載到存儲過程,則可以始終依賴運行時更改查詢文本。由於BIRT報告沒有被編譯(它們是XML),所以您可以根據參數更改查詢並在設計的每次運行中都執行它。查看數據集的onCreate事件,您可以訪問this.queryText並通過JavaScript執行任何您需要的動態字符串替換。隱藏參數是幫助修改/調整查詢的好方法。如果您正確構建數據集,那麼更改基礎數據就像更改數據源,然後將數據集重新關聯到新數據源(在編輯數據集窗口中)一樣簡單。我已經做了很多次,效果很好。如果您要走這條路線,我會將數據源,數據集和它們提供數據的任何控件添加到報告庫中。藉助該庫,您可以使用許多報告中的控件並將它們保存在一個位置。如果更新庫,所有使用該庫的報告也會更新。另外,如果你想真正承諾一個完全可重用的策略,允許你構建一個可重用組件庫,你可以在BIRT Exchange(Reusable Component Library)上查看免費的可重用組件庫。在我看來,這個策略會給你重用,但是以犧牲可維護性爲代價。這是混淆的抽象。它需要列和控件的完全通用的名稱,這使得調試非常困難。雖然這不是我的第一選擇(上面的選項是),但其他人已經成功地使用了它,所以我想我會將它包含在這裏,因爲它直接與您的問題對話。

+0

謝謝!我認爲重命名列是最簡單的,然後創建一個所有數據集都將具有的標準視圖,至少在有更加結構化的環境之前。然後,我可以簡單地將視圖名稱作爲報告變量傳遞,而且我不需要更改報告。 – 2010-09-17 15:43:51

相關問題