为了账号安全,请及时绑定邮箱和手机立即绑定

在数据透视表上配置额外的数据透视列标题

在数据透视表上配置额外的数据透视列标题

C#
慕少森 2021-07-27 15:12:00
我正在使用 NReco PivotData 库在日期字段上进行透视,以便日期在标题中水平显示。这很有效,但是,我想添加日期来填补空白,以便结果更完整(默认情况下,库仅显示包含在记录中的日期)。例如,如果我总共有 2 条记录,第一条记录是 01/01/2018,第二条记录是 10/01/2018,那么我将不会有包含两者之间所有日期的列。我已经通过为我的范围中的每个日期添加空值的记录来解决这个问题,但是,这会在结果的顶部添加一个空白行,这并不理想。总之,我想为我的日期维度添加“虚拟”值,以便通过显示没有任何条目的日期列来获得更完整的结果集。代码using (var package = new ExcelPackage()){    var dimensionNames = new string[] { "Id", "Name", "Date", "Hours" };    var aggregator = new SumAggregatorFactory("Hours");    var rows = new Dictionary<string, object>()    {        { 1, "John Smith", new DateTime(2018, 1, 1), 5 },        { 2, "John Doe", new DateTime(2018, 1, 10), 10 }    };    var pivotData = new PivotData(dimensionNames, aggregator, rows);    var pivotTable = new PivotTable(new string[] { "Name" }, new string[] { "Date" }, pivotData);    var worksheet = package.Workbook.Worksheets.Add("Report");    var tableWriter = new PivotTableExcelWriter(worksheet);    tableWriter.Write(pivotTable);    package.SaveAs(...);}
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

默认情况下,PivotData类在使用索引器访问时为非退出维度键创建新数据点,您可以使用它来创建“空”日期:


for (int i=1; i<=10; i++) {

  // if aggregator for specified keys doesn't exist, it will be added

  var aggr = pivotData[1, "John Smith", new Date(2018, 1, i), 5];

}

(你必须使用真正的键尺寸除“日期”,如果你不希望在数据透视表中创建额外的行/列,您可以从第一个真正的数据点得到他们。object[] firstEntryKeys = pivotData.First().Key;)


此行为由PivotData.LazyAdd属性控制,可以禁用。


查看完整回答
反对 回复 2021-07-31
  • 1 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信