Rally SDK 2.0:如何使用 TimeSeriesCalculator 显示多个数据列

Rally SDK 2.0: How to display multiple data columns with a TimeSeriesCalculator

我想显示 2 个时间序列的数据,其列在同一 "Rally.ui.chart.Chart" 中。 "Rally.data.lookback.calculator.TimeSeriesCalculator" 下面的配置将列堆叠在同一个 X 列上。有没有一种简单的方法可以将要并排显示的数据分组,而不是针对同一日期显示(如迭代燃尽图中的 "accepted" 和 "time remaining")?

也许是这样的?

             getMetrics: function () {
                 return [
                     {
                         "field": "TaskRemainingTotal", 
                         "as": "Hours Remaining",       
                         "f": "sum", 
                         "display": "column"                         
                     },
                     {
                         "field": "PlanEstimate", 
                         "as": "Story Points Accepted",
                         "f": "filteredSum",
                         "filterField": "ScheduleState",
                         "filterValues": ["Accepted", "Verified"],
                         "display": "column",
                         "group": "1"   //?????  is there a specifier to separate this data? 
                     },

                 ];
             }, 

这是用于燃烧图的计算器代码:

https://github.com/RallyApps/app-catalog/blob/master/src/apps/charts/burndown/BurnDownCalculator.js

编写计算器以从回顾中生成图表 api 可能是应用程序平台中最困难的事情,所以解决它的荣誉!

我也不是专家,但希望上面的代码足以为您指明正确的方向。如果您解决了问题或 运行 进入新问题,请 post 返回。

我可以通过将以下内容添加到 chartConfig 来让它工作:

plotOptions: {
    column: {
        stacking: null
    }
}

我发现了更多关于这个主题的信息,我认为它们可能会有帮助:

highcharts 中系列配置的 "stack" 成员允许按名称堆叠系列。我们可以创建一个更加灵活的系统,允许我们通过使用它来指定如何堆叠数据并覆盖 Rally.data.lookback.calculator.TimeSeriesCalculator 中的一些方法以允许修改系列数据。

  1. prepareChartData returns 系列数据,因此我们可以覆盖它的输出以添加系列数据:

prepareChartData: function(store) {
  var snapshots = [];
  store.each(function(record) {
    snapshots.push(record.raw);
  });
  var a = this.runCalculation(snapshots);
  for (var k in a.series) {
    if (a.series[k].name.startsWith("Story")) a.series[k].stack = "Story";
  }
  return a;
}

  1. 我们可以覆盖 _buildSeriesConfig 函数以将度量配置中 seriesConfig 数组中列出的任何属性推送到系列配置。这使我们能够以更好的方式指定系列格式,并使我们能够更强大地修改图表配置的其他属性:

_buildSeriesConfig: function(calculatorConfig) {
  var aggregationConfig = [],
    metrics = calculatorConfig.metrics,
    derivedFieldsAfterSummary = calculatorConfig.deriveFieldsAfterSummary;

  for (var i = 0, ilength = metrics.length; i < ilength; i += 1) {
    var metric = metrics[i];
    var seriesConfig = {
      name: metric.as || metric.field,
      type: metric.display,
      dashStyle: metric.dashStyle || "Solid"
    };
    for (var k in metric.seriesConfig) {
      seriesConfig[k] = metric.seriesConfig[k];
    }
    aggregationConfig.push(seriesConfig);
  }

  for (var j = 0, jlength = derivedFieldsAfterSummary.length; j < jlength; j += 1) {
    var derivedField = derivedFieldsAfterSummary[j];
    var seriesConfig = {
      name: derivedField.as,
      type: derivedField.display,
      dashStyle: derivedField.dashStyle || "Solid"
    };
    for (var k in derivedField.seriesConfig) {
      seriesConfig[k] = derivedField.seriesConfig[k];
    }
    aggregationConfig.push(seriesConfig);
  }

  return aggregationConfig;
},

此方法允许我们在 getMetrics 中提供 seriesConfig 属性,如下所示:

getMetrics: function() {
  return [{
      "field": "TaskRemainingTotal", // the field in the data to operate on
      "as": "Hours Remaining", // the label to appear on the chart
      "f": "sum", // summing function to use.
      "display": "column", // how to display the point on the chart. 
      seriesConfig: {
        "stack": "Hours",
        "color": "#005eb8"
      }
    }, {
      "field": "PlanEstimate", // the field in the data to operate on
      "as": "Story Points Accepted", // the label to appear on the chart
      "f": "filteredSum",
      "filterField": "ScheduleState", //  Only use points in seduled sate accepted or Verified
      "filterValues": ["Accepted", "Verified"],
      "display": "column",
      seriesConfig: {
        "stack": "Points",
        "color": "#8dc63f"
      }
    }, {
      "field": "PlanEstimate", // the field in the data to operate on
      "as": "Story Points Remaining", // the label to appear on the chart
      "f": "filteredSum",
      "filterField": "ScheduleState", //  Only use points in seduled sate accepted or Verified
      "filterValues": ["Idea", "Defined", "In Progress", "Completed"],
      "display": "column",
      seriesConfig: {
        "stack": "Points",
        "color": "#c0c0c0"
      }
    },

  ];
},

使用选项 #2,我们可以在配置指标的同一上下文中控制和添加任何系列配置数据,而无需担心配置顺序。选项 #2 有点危险,因为下划线暗示该方法是私有的,因此没有合同保证在未来的修订中保持兼容。 (也许集会人员会看到这一点并为我们扩展功能)