2015-11-25 102 views
2

我在Birt報告中有一張表格,我想要顯示客戶進程的底部10個處理時間。一個簡單的「底部n」過濾器非常好 - 但這裏是我的客戶。他表示,他希望像我創建的最低10張桌子,但沒有不一致的價值,這是由一個月只運行一次的單一流程產生的。按照Birt表格的順序過濾

因此,該表應該顯示最低10個處理時間,但它應該只包含進程,如果特定進程超過了,比如說一個月內整體運行進程的0.01%。

我嘗試了一個額外的過濾器,它只顯示運行頻率超過總進程的0.01%的進程 - 但現在我的結果表是空的。

是否有可能實現這一伯特過濾第一所有進程出的被處理的過程的總量和的小於0.01%該後構建過濾前結果的底部10列表中設置?我無法更改SQL數據集,因爲它也在其他一些表中使用。

這裏是我的過濾器工作正常,如果我只應用其中的一個 - 兩個在一起我收到一個空的結果集。

<list-property name="filter"> 
    <structure> 
    <property name="operator">ge</property> 
    <expression name="expr" type="javascript">row["TOTAL"]/row["Ov_TOTAL"]</expression> 
    <simple-property-list name="value1"> 
     <value>0,01</value> 
    </simple-property-list> 
    <property name="updateAggregation">true</property> 
    </structure> 
    <structure> 
    <property name="operator">bottom-n</property> 
    <expression name="expr" type="javascript">row["AVG_DURATION"]</expression> 
    <simple-property-list name="value1"> 
     <value>10</value> 
    </simple-property-list> 
    <property name="updateAggregation">true</property> 
    </structure> 
</list-property> 

回答

0

我試了一下,它適用於我。與您的示例唯一的區別是,在我的情況下,應用過濾器時已經計算出比率:請參閱下面的「shareVolume」列。

<list-property name="filter"> 
    <structure> 
     <property name="operator">ge</property> 
     <expression name="expr" type="javascript">row["shareVolume"]</expression> 
     <simple-property-list name="value1"> 
      <value>0.01</value> 
     </simple-property-list> 
     <property name="updateAggregation">true</property> 
    </structure> 
    <structure> 
     <property name="operator">bottom-n</property> 
     <expression name="expr" type="javascript">row["value2"]</expression> 
     <simple-property-list name="value1"> 
      <value>3</value> 
     </simple-property-list> 
     <property name="updateAggregation">true</property> 
    </structure> 
</list-property> 

爲了達到這個目的,我計算了數據集中的比率。我剛剛添加了兩個計算列:SQL保持不變,使用相同數據集的其他現有報表組件仍然完美。

enter image description here

+0

計算列做結合的伎倆與更換的「0.01」到「0.01」。在我的下一個生活中,我希望我們都使用相同的語言,相同的字符集,相同的標準,並且都住在同一時區。我不知道我花了多少時間在這樣的事情上...... – twobeers