我正在使用 NReco 库来构建数据透视表。我正在按照示例进行操作,并且能够从 DataSet 构建一个简单的 PvT。现在我想构建一个 PvT,它接收在运行时选择的许多度量值,但是我在使用度量值列表的过程的动态性质方面遇到了麻烦,每个度量值都有自己的聚合公式。该公式在运行时是已知的,它只不过是一个总和或一个平均值,但特定于度量。我有以下代码:
private string CreatePivotTable(DataTable dt, string[] lines, string[] columns, string[] dimensions, string measure)
{
var pivotData = new PivotData(dimensions, new SumAggregatorFactory(measure), new DataTableReader(dt));
var pivotTable = new PivotTable(lines, columns, pivotData);
var htmlResult = new StringWriter();
var pvtHtmlWr = new PivotTableHtmlWriter(htmlResult);
pvtHtmlWr.Write(pivotTable);
return htmlResult.ToString();
}
我想做类似下面的代码来在运行时动态添加度量和聚合器:
private string CreatePivotTable(DataTable dt, string[] lines, string[] columns, string[] dimensions, Measure[] measures)
{
var pivotData = new PivotData(dimensions, null, new DataTableReader(dt));
foreach(var m in measures)
{
if (m.Formula.equals("sum"))
pivotData.AggregatorFactory.Create(new SumAggregator(m.ColName));
else if(m.Formula.equals("avg")){
pivotData.AggregatorFactory.Create(new AvgAggregator(m.ColName));
}
}
}
我怎样才能实现这样的目标?有没有办法做到这一点?