Вы можете достичь желаемого следующим образом:
- настроить базовый
PivotTable
класс для оси заказов с датами в обратном порядке (по убыванию) - применить оболочку TopPivotTable квыберите только первые 3 даты (= так, чтобы они фактически были последними 3 днями)
- ключи обратной оси с
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);
}
}