我一直在努力解决这个问题,并且想知道我是否能得到一些帮助。
我有以下项目:
Datatable inputdata = //Data from large scale SQL query
var rowvals = (from x in reportattrs.AsEnumerable()
where x.Field<long>("COLFORREPORT") == 0 && x.Field<long>("VALUEFIELD") == 0
orderby x.Field<long>("ORDERDISPLAY")
select new { Name = x.Field<object>("FIELDNAME") });
var colvals = (from x in reportattrs.AsEnumerable()
where x.Field<long>("COLFORREPORT") == 1 && x.Field<long>("VALUEFIELD") == 0
orderby x.Field<long>("ORDERDISPLAY")
select new { Name = x.Field<object>("FIELDNAME") });
var datavals = (from x in reportattrs.AsEnumerable()
where x.Field<long>("COLFORREPORT") == 1 && x.Field<long>("VALUEFIELD") == 1
orderby x.Field<long>("ORDERDISPLAY")
select new { Name = x.Field<object>("FIELDNAME") });
Rowvals是我们要在行中过滤的表的属性,colvals是数据透视表的列值,datavals是数据总和
我想要做的是创建我自己的自定义数据透视表例程,该例程允许我使用更复杂的方法进行过滤和分层。
我能够获得一行的特定不同值:
foreach(object val in rowvals){
var distinctValues = dsValues.AsEnumerable()
.Select(row => new {
attribute1_name = row.Field<string>(val)
})
.Distinct();
}
我如何过滤出组合中的每个值(对于可变数字的行和列)对我来说很难。不仅如此,我还需要为每个值列选择所有值,以便我可以按照我认为合适的方式对其进行汇总。
任何帮助都会很大!
由于 乔恩
答案 0 :(得分:1)
输入数据的外观并不十分清楚;因为你想构建数据透视表我假设它可以像那样呈现为数据集(如果不是,它应该被转换为可接受的数据透视操作):
col1 | col2 | val1
-------------------
C1 | R1 | 1
C1 | R2 | 2
C1 | R1 | 3
C2 | R1 | 4
和所需的数据透视表就是这样的(让我们使用数据透视表列的col1&#39;值和行的&#39; col2&#39;值,以及val1的值为值):< / p>
| C1 | C2
-----------------
R1 | 4 | 4
R2 | 2 | 0 (or empty)
像这样的数据透视表的数据可以通过NReco PivotData库轻松计算,只需几行代码(免责声明:我是这个库的作者):
// group and calculate measures
var pivotData = new PivotData(
new string[] {"col1","col2"},
new SumAggregatorFactory("val1"),
new DataTableReader(t) );
// get pivot table model for accessing columns/rows/values in easy way
var pivotTable = new PivotTable(
new []{"col2"}, // row dimension(s)
new []{"col1"}, // column dimension(s)
pivotData );
var rowLabels = pivotTable.RowKeys;
var colLabels = pivotTable.ColumKeys;
var cellValue = pivotTable[0, 0].Value; // R1 + C1: 4
var grandTotal = pivotTable[null,null].Value; // 10
您还可以为行/列指定多个列,并可以计算多个度量。如果不清楚,请随时与我联系。