猿问

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

我正在使用 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(...);

}


慕少森
浏览 242回答 1
1回答

慕的地8271018

默认情况下,PivotData类在使用索引器访问时为非退出维度键创建新数据点,您可以使用它来创建“空”日期:for (int i=1; i<=10; i++) {&nbsp; // if aggregator for specified keys doesn't exist, it will be added&nbsp; var aggr = pivotData[1, "John Smith", new Date(2018, 1, i), 5];}(你必须使用真正的键尺寸除“日期”,如果你不希望在数据透视表中创建额外的行/列,您可以从第一个真正的数据点得到他们。object[] firstEntryKeys = pivotData.First().Key;)此行为由PivotData.LazyAdd属性控制,可以禁用。
随时随地看视频慕课网APP
我要回答