取前 N 行非常简单,并且适用于
var topPvtTbl = new TopPivotTable(runningPvtTbl, 3, 99);
topPvtTbl.IncludeOtherGroups = false;
有逆吗?我的用例是数据在行上按升序返回日期,而不是取前 3 个日期,我想要最后 3 个日期。我没有看到 BottomPivotTable 选项。
取前 N 行非常简单,并且适用于
var topPvtTbl = new TopPivotTable(runningPvtTbl, 3, 99);
topPvtTbl.IncludeOtherGroups = false;
有逆吗?我的用例是数据在行上按升序返回日期,而不是取前 3 个日期,我想要最后 3 个日期。我没有看到 BottomPivotTable 选项。
您可以通过以下方式实现您想要的:
PivotTable
类配置为以逆序(降序)的日期对轴进行排序Array.Reverse
。例如,如果日期是列: Array.Reverse(topPvtTbl.ColumnKeys);
- 更新 -
如果底层与表相关的计算依赖于具体的轴顺序(如 RunningValuePivotTable),则此方法将不起作用。或者,您可以实现自己的IPivotTable
包装器,该包装器采用最后 N 个项目。例如:
public class LastNColumnsPivotTable : IPivotTable {
IPivotTable basePvtTbl;
public LastNColumnsPivotTable(IPivotTable pvtTbl, int lastN) {
basePvtTbl = pvtTbl;
if (basePvtTbl.ColumnKeys.Length>lastN) {
lastColumnKeys = basePvtTbl.ColumnKeys.Skip(basePvtTbl.ColumnKeys.Length - lastN).ToArray();
} else {
lastColumnKeys = basePvtTbl.ColumnKeys;
}
}
public string[] Columns { get { return basePvtTbl.Columns; } }
public string[] Rows { get { return basePvtTbl.Rows; } }
ValueKey[] lastColumnKeys;
public ValueKey[] ColumnKeys { get { return lastColumnKeys; } }
public ValueKey[] RowKeys { get { return basePvtTbl.RowKeys; } }
public IPivotData PivotData { get { return basePvtTbl.PivotData; } }
public IAggregator GetValue(ValueKey rowKey, ValueKey colKey) {
return basePvtTbl.GetValue(rowKey, colKey);
}
}