在数据透视表上配置额外的数据透视列 headers
Configure additional pivot column headers on PivotTable
我正在使用 NReco PivotData 库在日期字段上进行旋转,以便日期水平显示在 header 中。这很好用,但是,我想添加日期来填补空白,以便结果更完整(默认情况下,库仅显示记录中包含的日期)。
例如,如果我总共有 2 条记录,第一条记录在 2018 年 1 月 1 日,第二条记录在 2018 年 1 月 10 日,我将不会为中间的所有日期设置列。
我已经通过为范围内的每个日期添加空值记录来解决问题,但是,这会在结果顶部添加一个空白行,这并不理想。
总而言之,我想为我的 日期 维度添加 "virtual" 值,这样我就可以通过显示日期的列来获得更完整的结果集没有任何条目。
代码
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(...);
}
默认情况下 PivotData
class 为非现有维度键创建新数据点当使用索引器访问时,您可以使用它来创建 'empty' 日期:
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];
}
(如果您不想在枢轴 table 中创建额外的 rows/columns,则必须对 "Date" 之外的维度使用真实的键。您可以从第一个真实的数据点:object[] firstEntryKeys = pivotData.First().Key;
)
此行为由 PivotData.LazyAdd 属性 控制,可以禁用。
我正在使用 NReco PivotData 库在日期字段上进行旋转,以便日期水平显示在 header 中。这很好用,但是,我想添加日期来填补空白,以便结果更完整(默认情况下,库仅显示记录中包含的日期)。
例如,如果我总共有 2 条记录,第一条记录在 2018 年 1 月 1 日,第二条记录在 2018 年 1 月 10 日,我将不会为中间的所有日期设置列。
我已经通过为范围内的每个日期添加空值记录来解决问题,但是,这会在结果顶部添加一个空白行,这并不理想。
总而言之,我想为我的 日期 维度添加 "virtual" 值,这样我就可以通过显示日期的列来获得更完整的结果集没有任何条目。
代码
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(...);
}
默认情况下 PivotData
class 为非现有维度键创建新数据点当使用索引器访问时,您可以使用它来创建 'empty' 日期:
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];
}
(如果您不想在枢轴 table 中创建额外的 rows/columns,则必须对 "Date" 之外的维度使用真实的键。您可以从第一个真实的数据点:object[] firstEntryKeys = pivotData.First().Key;
)
此行为由 PivotData.LazyAdd 属性 控制,可以禁用。