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 中的一些方法以允许修改系列数据。
- 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;
}
- 我们可以覆盖 _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 有点危险,因为下划线暗示该方法是私有的,因此没有合同保证在未来的修订中保持兼容。 (也许集会人员会看到这一点并为我们扩展功能)
我想显示 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 中的一些方法以允许修改系列数据。
- 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;
}
- 我们可以覆盖 _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 有点危险,因为下划线暗示该方法是私有的,因此没有合同保证在未来的修订中保持兼容。 (也许集会人员会看到这一点并为我们扩展功能)