2013-07-11 30 views
1

我有一個BIRT報告,顯示某些日子某些線路的呼叫統計。現在我必須添加一個名爲「呼叫處理時間」的新的測量。的數據是從一個MySQL數據庫收集:BIRT報告交叉表:如何計算和顯示持續時間?

TIME_FORMAT(SEC_TO_TIME(some calculations on the duration of calls in seconds),'%i:%s') AS "CHT" 

我不能在顯示在我的交叉的持續時間「MM:SS」 -format即使在不轉換爲字符串。我可以通過不將它們轉換爲時間/字符串來顯示秒數,但這不是人類可讀的。 另外,我應該添加一個「總計」,它可以計算所有日子的平均值。使用秒時沒有問題,但我不知道如何以時間格式來做到這一點。

我必須在查詢中使用哪些數據類型/ functoins /表達式/設置,Data Cube定義和交叉表單元格才能使其工作?

回答

1

時間格式不是持續時間度量,它不能被概括或用於平均值。解決方案是在數據庫中保留「秒」作爲度量來計算聚合,並創建派生的度量以供顯示。

在您的datacube中,選擇此「秒」度量,然後單擊「添加」以創建派生度量。我會用BIRT數學函數建立這個表達式:

BirtMath.round(measure["seconds"]/60)+":"+BirtMath.mod(measure["seconds"],60) 
+0

這做到了。我之前嘗試過類似的東西,但不知道我必須使用新的派生度量。 感謝您向我展示正確的方向。 – m00hk00h

0

這裏有一些事情需要提防:秒顯示爲單一的數字值(如果< 10)。這個基於的「秒」值不是一個整數,所以我還需要秒數round(),這導致秒數有時是「60」。 所以我不得不介紹一些JavaScript條件來顯示正確的格式,包括如果「0:00」根本不顯示。 對於「總計」列,我使用秒數值的彙總總計,並做了如下完全相同的事情。

這是我最終使用的實際腳本:

if (measure["seconds"] > 0) 
{ 
    var seconds = BirtMath.round(BirtMath.mod(measure["seconds"],60)); 
    var minutes = BirtMath.round(measure["seconds"]/60); 
    if(seconds == 60) 
    { 
     seconds = 0; 
    } 
    if (seconds < 10) 
    { 
     minutes + ":0" + seconds; 
    } 
    else 
    { 
     minutes + ":" + seconds; 
    } 
}