我怎样才能改变我的数据透视表,以便它以所需的方式显示数据?

How can I alter my PivotTable so that it displays the data in the desired way?

我已经能够将 PivotTable 拖到舞池中,但无法让它放下 - 似乎我们一直踩到对方的脚趾。我已经在 sheet 上获得了数据,可以从中构建 Pivot Table。此 class 描述了该数据:

public class PriceVarianceData
{
    public String Unit { get; set; }
    public String ShortName { get; set; }
    public String ItemCode { get; set; }
    public String Description { get; set; }
    public String PriceWeek { get; set; }
    public String Week { get; set; }
    public String Price { get; set; }
    public String Variance { get; set; }
    public String VarianceAverage { get; set; }
    public int RegionOrder { get; set; }
    public int ContractPrice { get; set; }
}

sheet 上的第一列 ("A") 包含单位值,第二列 ("B") 显示 ShortName 值等。

我正在使用以下代码从该数据创建数据透视表Table:

private void AddPivotTable()
{
    pivotData = _xlSheet.Range["A1:K1600"];
    pivotDestination = _xlSheet.Range["A1602", useDefault];

    _xlBook.PivotTableWizard(
        Excel.XlPivotTableSourceType.xlDatabase,
        pivotData,
        pivotDestination,
        pivotTableName,
        true,
        true,
        true,
        true,
        useDefault,
        useDefault,
        false,
        false,
        Excel.XlOrder.xlDownThenOver,
        0,
        useDefault,
        useDefault
    );

    // Set variables used to manipulate the Pivot Table.
    pivotTable = (Excel.PivotTable)_xlSheet.PivotTables(pivotTableName);

    shortnamePivotField = (Excel.PivotField)pivotTable.PivotFields(2);
    itemcodePivotField = (Excel.PivotField)pivotTable.PivotFields(3);
    descriptionPivotField = (Excel.PivotField)pivotTable.PivotFields(4);
    priceweekPivotField = (Excel.PivotField)pivotTable.PivotFields(5);
    weekPivotField = (Excel.PivotField)pivotTable.PivotFields(6);
    regionorderPivotField = (Excel.PivotField)pivotTable.PivotFields(10);

    // Format the Pivot Table.
    pivotTable.Format(Excel.XlPivotFormatType.xlReport2);
    pivotTable.InGridDropZones = false;
    pivotTable.SmallGrid = false;
    pivotTable.ShowTableStyleRowStripes = true;
    pivotTable.TableStyle2 = "PivotStyleLight1";

    // The PivotFields have the following interesting properties:
    // Orientation, Function, Calculation

    // Page Field
    //shortnamePivotField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;

    // Column Field
    priceweekPivotField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;

    // Row Fields
    descriptionPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
    //regionorderPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

    // Data Fields
    //contractPricePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
    //contractPricePivotField.Function = Excel.XlConsolidationFunction.xlSum;
    itemcodePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
    itemcodePivotField.Function = Excel.XlConsolidationFunction.xlSum;
}

不可否认,范围值的硬编码有点愚蠢,但这是一个实验项目,它总是 return 相同(数量)的数据,所以在这种情况下它可以工作,有点做作案例.

上面的代码确实在 sheet 中添加了一个 PivotTable,但它为查看者提供的价值很小,因为它没有什么意义(原始数据的最后几行显示在顶部;PivotTable 从第 1602 行开始):

我意识到问题存在是因为我没有将正确的 PivotFields 指定为 xlPageField、xlColumnField[s]、xlRowField[s] 和 xlDataField[s]。问题是我的粗心大意之一。我的灰质并没有全神贯注于这些数据,而是沿着枢轴 Table.

的壁垒以一个静止角度松弛地躺着

我需要做什么才能改变 PivotTable 的外观,使其显示:

每个 ItemCode(例如“110051”)的总计,与 ShortName 无关。

...也许在另一个 PivotTable:

每个短名称(例如 "T&T")的总数,与 ItemCode 无关。

???

更新

受评论 here 的启发,我添加了列标题,这稍微改变了 PivotTable:

更新 2

这是我想在代码中创建的 fakely-generated(使用 GUI,而不是代码)PivotTable:

需要什么代码来将 "SHORT NAME" 指定为 "Report Filter",以便生成如上所示的 drop-down 以及可选的各种 ShortName 值?

更新 3

这是我最好的猜测:

// Page Field
shortnamePivotField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;

// Row Fields
descriptionPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
itemcodePivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

// Data Fields
pricePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
pricePivotField.Function = Excel.XlConsolidationFunction.xlSum;

...但并不比往墙上扔代码好,因为它不起作用:

我已经走到一半了;在我对另一个问题 .

的自动回答中显示了我为开始如何完成我需要做的事情所做的工作