2014-02-19 51 views
0

我需要創建條形圖來顯示各種值,例如「已創建」,「已關閉」,「已提交」的數據,包括Y軸上的計數和x軸上的日期。條形圖與Rally.data.lookback.calculator.TimeSeriesCalculator

對於任何一個標準,我都能夠成功地做到這一點。不過,我無法獲得顯示多個欄。

下面是我目前使用的代碼:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Defect Trend App</title> 
    <script type="text/javascript" src="/apps/2.0rc1/sdk.js"></script> 
    <script type="text/javascript"> 
     Rally.onReady(function() { 
(function() { 
    Ext.define('CustomApp', { 
    extend: 'Rally.app.App', 
    componentCls: 'app', 
    launch: function() {  
     return this.createTrendChart(); 
    }, 

    createTrendChart: function() { 
     var ProjectOid; 
     ProjectOid = this.getContext().getProject().ObjectID; 
     var ReleaseOID = <My Release ID>; 
     Ext.define('My.TrendCalc', { 
     extend: 'Rally.data.lookback.calculator.TimeSeriesCalculator', 
     getMetrics: function() { 
      return [ 
      { 
       as: 'Defects', 
       display: 'column', 
       f: 'count' 
      } 
      ]; 
     } 
     }); 
     this.myTrendChart = Ext.create('Rally.ui.chart.Chart', { 
     storeType: 'Rally.data.lookback.SnapshotStore', 
     storeConfig: { 
      find: { 
      _TypeHierarchy: "Defect", 
      State: { 
       $lt: "Closed" 
      }, 
      _ProjectHierarchy: ProjectOid, 
      Release: ReleaseOID 
      },   
      fetch: ["_ValidFrom", "_ValidTo", "ObjectID"] 
     },  

     calculatorType: 'My.TrendCalc', 
     calculatorConfig: {}, 
     chartConfig: { 
      chart: { 
      zoomType: 'x', 
      type: 'column' 
      }, 
      title: { 
      text: 'Defects over Time' 
      }, 
      xAxis: { 
      type: 'datetime', 
      minTickInterval: 1 
      }, 
      yAxis: { 
      title: { 
       text: 'Number of Defects' 
      } 
      } 
     } 
     }); 

     return this.add(this.myTrendChart); 
    } 
    }); 

}).call(this);    
      Rally.launchApp('CustomApp', { 
       name:"Defect Trend App", 
       parentRepos:"" 
      }); 

     }); 
    </script> 
    <style type="text/css"> 
.app { 
    /* Add app styles here */ 
} 
    </style> 
</head> 
<body></body> 
</html> 
+0

基本上我想讀取多個指標顯示他們在圖 – user3129202

回答

2

我不認爲自己在這方面的專家,但我相信這會爲你工作...

我把你的代碼一個基地,並根據一些other code修改它,以得到我認爲似乎是你想要的工作版本。以下是在Rally中運行的代碼的屏幕截圖。

我的數據在系列中沒有很多變化(大部分都是發佈的),所以看起來沒什麼意思。你可能想要排除最終狀態(因爲我相信你通過$ lt:'Completed'做了你的代碼......我改變爲$ lte:'Completed'暫時)。

example

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><html><head><title> 
Defect Trend App </title> 
    <script type="text/javascript" src="/apps/2.0rc1/sdk.js"></script> 
    <script type="text/javascript"> 

    var states = ['Accepted','Released']; // all enum values for 'State' 
    var field = 'ScheduleState'; // or 'State' 
    var ReleaseOID = XXXXXX; // your release Oid 

    Rally.onReady(function() { 
      Ext.define('CustomApp', { 
       extend: 'Rally.app.App', 
       componentCls: 'app', 
       launch: function() {  
        return this.createTrendChart(); 
       }, 

       createTrendChart: function() { 
        var ProjectOid; 
        ProjectOid = this.getContext().getProject().ObjectID; 


        Ext.define('My.TrendCalc', { 
         extend: 'Rally.data.lookback.calculator.TimeSeriesCalculator', 
         getDerivedFieldsOnInput: function() { 
          var m = _.map(states, function(state) { 
           return { 
            "as": state, 
            "f" : function(snapshot) { 
             var value = (snapshot[field] == state) ? 1 : 0; 
             return value; 
            } 
           } 
          }) 
          return m; 
         }, 
         getMetrics : function() { 
          var m = _.map(states, function(state) { 
           return { 
            field: state, 
            as: state, 
            f: 'sum' 
           } 
          }) 
          return m; 
         } 
        }); 

        this.myTrendChart = Ext.create('Rally.ui.chart.Chart', { 
         storeType: 'Rally.data.lookback.SnapshotStore', 
         storeConfig: { 
          find: { 
           _TypeHierarchy: "Defect", 
           State: {$lte: "Closed" }, 
           _ProjectHierarchy: ProjectOid, 
           Release: ReleaseOID 
          },   
          fetch: ["_ValidFrom", "_ValidTo", "ObjectID", field], 
          hydrate: [field], 
          sort: { "_ValidFrom" : 1} 
         },  
         calculatorType: 'My.TrendCalc', 
         calculatorConfig : {}, 
         chartConfig: { 
          chart: { 
            zoomType: 'xy', 
            type:'column' 
          }, 
          title: { 
           text: 'Defects over Time' 
          }, 
          xAxis: { 
           type: 'datetime', 
           title: { text: 'When'}, 
           minTickInterval: 5, 
           labels : { rotation: 90 } 
          }, 
          yAxis: { title: { text: 'Count' } }, 
          plotOptions: { 
           series: { 
            stacking: 'normal' 
           } 
          } 
         } 
        }); 

        return this.add(this.myTrendChart); 
       } 
      }); 
    }); 

    console.log("launching application"); 
    Rally.launchApp('CustomApp', { 
     name:'Defect Trend App', 
     parentRepos:"" 
    }); 
    </script> 
</head> 
<body> 
</body> 

引擎收錄 - http://pastebin.com/Vf6jniGZ

+0

非常感謝。這工作像魔術一樣。但是,請您告訴我您提及的這個功能的哪個應用程序。實際上,我需要有一個限制,並有可能在圖表中查看接下來的幾天。我將解釋發生了什麼,我現在每個發佈都會顯示此圖表,通常情況下,發佈時間爲30天,日期重疊,因此想要弄清楚這一點。抱歉讓你煩惱。 – user3129202

+0

該鏈接是在「其他代碼」下的主要答案,但在這裏。它在集會軟件應用程序目錄回購。 https://github.com/RallySoftware/app-catalog/tree/1da67ee10afb99ebe780514c54cf814d9c12dbf9/src/apps/charts/cfd/project。另外,如果它解決了您的問題,請接受答案,以便它不會出現在「未答覆」列表中。謝謝! –

+0

當然,謝謝。我已標記爲答案。 – user3129202

2

我不熟悉拉力賽的App包裝了SDK,但我Lumenize的主要作者,其中TimeSeriesCalculator從何而來。你的情況正是Lumenize.TimeSeriesCalculator的group-by功能所設計的。仔細閱讀documentation,瞭解TimeSeriesCalculator的工作原理。看看第二個例子「時間序列組 - 例子」。另外,這裏是a functioning jsfiddle of that group-by example

,你需要的鍵位是:

metrics = [ 
    ... 
    {f: 'groupByCount', groupByField: 'ScheduleState', allowedValues: allowedValues, prefix: 'Count '}, 
    ... 
] 
+0

謝謝,您的想法。我會通過鏈接,並嘗試使用相同 – user3129202

+0

希望你能得到它的工作,並將我的答案標記爲接受。 –

+0

我經歷了文檔,但不知何故,我無法得到它的工作。也許我正在嘗試錯誤。我會繼續努力。非常感謝您的幫助和時間。 – user3129202