Как получить среднее значение "Grand Total", а не сумму?

Я получаю (бесплатно) столбец "Общий итог" в моей сводной таблице:

введите описание изображения здесь

Для "TotalQty" и "TotalPrice" это отлично, но для "AvgPrice" и "PrcntgOfTotal" не так много.

Как я могу получить эти значения, чтобы показать среднее значение в первом случае, а не сумму?

проценты за месяц - это% от TotalPrice к сумме за этот месяц (не общая сумма за все месяцы); поэтому GrandTotal.PrcntgOfTotal также не должен быть средним из месячных значений.

Вот код, который у меня есть, который генерирует эту сводную таблицу:

private void PopulatePivotTableSheet()
{
    string NORTHWEST_CORNER_OF_PIVOT_TABLE = "A6";
    AddPrePivotTableDataToPivotTableSheet();
    var dataRange = rawDataWorksheet.Cells[rawDataWorksheet.Dimension.Address];
    dataRange.AutoFitColumns();
    var pivotTable = pivotTableWorksheet.PivotTables.Add(
                        pivotTableWorksheet.Cells[NORTHWEST_CORNER_OF_PIVOT_TABLE], 
                        dataRange, 
                        "PivotTable");
    pivotTable.MultipleFieldFilters = true;
    //pivotTable.RowGrandTotals = true; <= default setting
    //pivotTable.ColumGrandTotals = true; <= default setting
    //pivotTable.RowGrandTotals = false; // this prevents the "Grand Total" column
    //pivotTable.ColumGrandTotals = false; // this prevents the totals rows at the bottom
    //pivotTable.Compact = true;
    //pivotTable.CompactData = true;
    pivotTable.GridDropZones = false;
    pivotTable.Outline = false;
    pivotTable.OutlineData = false;
    pivotTable.ShowError = true;
    pivotTable.ErrorCaption = "[error]";
    pivotTable.ShowHeaders = true;
    pivotTable.UseAutoFormatting = true;
    pivotTable.ApplyWidthHeightFormats = true;
    pivotTable.ShowDrill = true;

    // Row field[s]
    var descRowField = pivotTable.Fields["Description"];
    pivotTable.RowFields.Add(descRowField);

    // Column field[s]
    var monthYrColField = pivotTable.Fields["MonthYr"];
    pivotTable.ColumnFields.Add(monthYrColField);

    // Data field[s]
    var totQtyField = pivotTable.Fields["TotalQty"];
    pivotTable.DataFields.Add(totQtyField);

    var totPriceField = pivotTable.Fields["TotalPrice"];
    pivotTable.DataFields.Add(totPriceField);

    // Don't know how to calc these vals here, so had to put them on the data sheet
    var avgPriceField = pivotTable.Fields["AvgPrice"];
    pivotTable.DataFields.Add(avgPriceField);

    var prcntgOfTotalField = pivotTable.Fields["PrcntgOfTotal"];
    pivotTable.DataFields.Add(prcntgOfTotalField);
}

1 ответ

pivotTable.DataFields[DATAFIELD NUM].Function =
 OfficeOpenXml.Table.PivotTable.DataFieldFunctions.Average

Обратите внимание, что DATAFIELD NUM - это индекс в наборе полей данных. Определено в:

OfficeOpenXml.Table.PivotTable.ExcelPivotTableDataFieldCollection
Другие вопросы по тегам