2013-12-13 40 views
1

我已經看遍了各處,如果可能的話,似乎找不到任何東西,所以我就到了這裏。無論如何,這是我的問題。根據BIRT中的另一個表更改表值

我有一個計算,每月特殊羣體的平均調查分數查詢,輸出是這樣的:

GRP1 71.2 
GRP2 77.2 
GRP3 81.6 

現在我不得不與越來越像基於這些點值,一些標準的另一個表:

min_value max_value  point 
    95   100   80 
    85   94   60 
    75   84   40 
    65   74   20 

基本上意味着95-100應該得到80分,等等,這是動態的(在我的應用程序可以更改這些值或添加/刪除行用戶),所以我想了標籤上編寫腳本第一張桌子,查找第二張桌子,比較它的最小值和最大值。不過,我環顧四周,沒有看到如何做到這一點。我想以某種方式將數據集轉換爲可以循環遍歷的對象列表,以便我可以比較每行的值,但我不知道如何執行此操作。

編輯:我發現了一種方法,但它涉及我加入第二個表格的第一,然後設置,以便在成績不是最小值和最大值之間的行不顯示的可見性屬性。不過,我對這種效率感到懷疑,所以我想知道是否有更好的方法。

回答

0

在「編輯數據集」做一個「計算列」

這裏的JavaScript的〔實施例我使用了simular的問題,但我是一個數轉換爲字串。

if (row["Change Assessment"]==1){ 
"Very High" 
}else if (row["Change Assessment"]==2){ 
"High" 
}else if (row["Change Assessment"]==3){ 
"Low" 
}else if (row["Change Assessment"]==4){ 
"Very Low" 
}else { 
"Undefined"} 
0

最有效,最簡單的方法是做這在你的數據庫的存儲過程:我們按月存儲在臨時表中的彙總調查,然後我們把它加入到最小 - 最大表。

對於BIRT的解決方案而已,我們可以創建一個數據集的加入:

  • 添加一個虛構的列,其值始終爲「1」(或任何恆定值,你喜歡...),以每的2個現有數據集。
  • 創建這2個數據集之間的一個新的「加盟的數據集」,並使用我們的虛構欄鏈接他們,使我們得到了一個「笛卡爾積」
  • 在加入數據集的「過濾器」選項卡中,添加一個新的過濾器選擇具有min-max之間的調查得分的行
  • 就是這樣!
1

你不必顯示來自第二表數據,對不對?該表只是定義了值邊界。如果是這樣,您可以通過在綁定到第二個數據庫表的報表中添加一個不可見表格來預加載JavaScript對象中第二個表格的數據。該表格項目必須位於顯示第一個表格的數據的報表項目之前。

您必須編寫JavaScript中位:

  • 創建2個數據集:每個db表
  • 一個添加綁定到第二個數據集
  • 表使這個表不可見:屬性編輯器 - >可見性選項卡。該表是那裏只是從數據庫使所述第二數據集加載數據
  • 創建beforeOpen()事件句柄第二數據集
  • 在beforeOpen定義一個新的全局變量()腳本:gValueMapping = [];此變量將保持二維數組:[第二表的大小] [2]
  • 創建onFetch()的事件處理程序的第二數據集
  • 添加當前行值,以全局變量gValueMapping:gValueMapping.push( [row [「min_value」],row [「point」]])。如果您按min_value排序第二個數據集,則不需要知道max_value。
  • 現在創建綁定到所述第一表中的表中的新數據綁定
  • 程序的結合如下:在以相反的順序的gValueMapping迭代直到電流值小於在gValueMapping [I] [0的值],然後返回gValueMapping [i] [1]。它包含相應的「點」值。
相關問題