0

取前 N 行非常简单,并且适用于

var topPvtTbl = new TopPivotTable(runningPvtTbl, 3, 99);
                                topPvtTbl.IncludeOtherGroups = false;

有逆吗?我的用例是数据在行上按升序返回日期,而不是取前 3 个日期,我想要最后 3 个日期。我没有看到 BottomPivotTable 选项。

4

1 回答 1

0

您可以通过以下方式实现您想要的:

  • 将基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);
  }
}
于 2019-09-20T05:29:51.710 回答